forked from asyncapi/saunter
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
asyncapi#207 [FEATURE] Generate classes based on AsyncAPI document
- Loading branch information
SennG
committed
Jul 14, 2024
1 parent
68e06ca
commit 5ed4c20
Showing
9 changed files
with
238 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
using System.Linq; | ||
using Microsoft.AspNetCore.Builder; | ||
using Microsoft.AspNetCore.Http; | ||
using Microsoft.Extensions.DependencyInjection; | ||
using Microsoft.Extensions.Hosting; | ||
using Microsoft.Extensions.Logging; | ||
using Microsoft.Extensions.Options; | ||
using NLog; | ||
using NLog.Web; | ||
using Saunter; | ||
using Saunter.AsyncApiSchema.v2; | ||
using StreetlightsAPI; | ||
|
||
LogManager.Setup().LoadConfigurationFromAppSettings(); | ||
|
||
var builder = WebApplication.CreateBuilder(args); | ||
builder.Logging.AddSimpleConsole(console => console.SingleLine = true); | ||
builder.Host.UseNLog(); | ||
|
||
// Add Saunter to the application services. | ||
builder.Services.AddAsyncApiSchemaGeneration(options => | ||
{ | ||
options.AssemblyMarkerTypes = [typeof(StreetlightMessageBus)]; | ||
|
||
options.Middleware.UiTitle = "Streetlights API"; | ||
|
||
options.AsyncApi = new AsyncApiDocument | ||
{ | ||
Info = new Info("Streetlights API", "1.0.0") | ||
{ | ||
Description = "The Smartylighting Streetlights API allows you to remotely manage the city lights.", | ||
License = new License("Apache 2.0") | ||
{ | ||
Url = "https://www.apache.org/licenses/LICENSE-2.0" | ||
} | ||
}, | ||
Servers = | ||
{ | ||
["mosquitto"] = new Server("test.mosquitto.org", "mqtt"), | ||
["webapi"] = new Server("localhost:5000", "http"), | ||
}, | ||
}; | ||
}); | ||
|
||
builder.Services.AddScoped<IStreetlightMessageBus, StreetlightMessageBus>(); | ||
builder.Services.AddControllers(); | ||
|
||
var app = builder.Build(); | ||
|
||
app.UseDeveloperExceptionPage(); | ||
|
||
app.UseRouting(); | ||
app.UseCors(configure => configure.AllowAnyOrigin().AllowAnyMethod()); | ||
|
||
// to be fixed with issue #173 | ||
#pragma warning disable ASP0014 // Suggest using top level route registrations instead of UseEndpoints | ||
app.UseEndpoints(endpoints => | ||
{ | ||
endpoints.MapAsyncApiDocuments(); | ||
endpoints.MapAsyncApiUi(); | ||
|
||
endpoints.MapControllers(); | ||
}); | ||
#pragma warning restore ASP0014 // Suggest using top level route registrations instead of UseEndpoints | ||
|
||
await app.StartAsync(); | ||
|
||
// Print the AsyncAPI doc location | ||
var logger = app.Services.GetService<ILoggerFactory>().CreateLogger<Program>(); | ||
var options = app.Services.GetService<IOptions<AsyncApiOptions>>(); | ||
var addresses = app.Urls; | ||
logger.LogInformation("AsyncAPI doc available at: {URL}", $"{addresses.FirstOrDefault()}{options.Value.Middleware.Route}"); | ||
logger.LogInformation("AsyncAPI UI available at: {URL}", $"{addresses.FirstOrDefault()}{options.Value.Middleware.UiBaseRoute}"); | ||
|
||
// Redirect base url to AsyncAPI UI | ||
app.Map("/", () => Results.Redirect("index.html")); | ||
app.Map("/index.html", () => Results.Redirect(options.Value.Middleware.UiBaseRoute)); | ||
|
||
await app.WaitForShutdownAsync(); |
64 changes: 64 additions & 0 deletions
64
examples/StreetlightsAPI.AsyncApiSpecFirst/StreetlightsAPI.AsyncApiSpecFirst.csproj
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
<Project Sdk="Microsoft.NET.Sdk.Web"> | ||
|
||
<PropertyGroup> | ||
<!-- This project is targeting .NET8 intentionally (The 'old school' Startup-class project is .NET6), to prove that | ||
the AsyncAPI.Saunter.Generator.Cli tool can generate specs for projects targetting .NET6 and .NET8. --> | ||
<TargetFramework>net8.0</TargetFramework> | ||
<IsPackable>false</IsPackable> | ||
|
||
<!-- Example settings for "AsyncAPI.Saunter.Generator.Build", they are all option though --> | ||
<AsyncAPIGenerateDocumentsOnBuild>false</AsyncAPIGenerateDocumentsOnBuild> | ||
</PropertyGroup> | ||
|
||
<ItemGroup> | ||
<AsyncAPISpecs Include="specs/streetlights.yml" Namespace="Saunter" /> | ||
</ItemGroup> | ||
|
||
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> | ||
<DocumentationFile>bin\Debug\StreetlightsAPI.TopLevelStatement.xml</DocumentationFile> | ||
<NoWarn>1701;1702;1591</NoWarn> | ||
</PropertyGroup> | ||
|
||
<PropertyGroup Condition=" '$(Configuration)' == 'Release' "> | ||
<DocumentationFile>bin\Release\StreetlightsAPI.TopLevelStatement.xml</DocumentationFile> | ||
<NoWarn>1701;1702;1591</NoWarn> | ||
</PropertyGroup> | ||
|
||
<!-- Get the latest local build nuget package from source code, from the local nuget packages source as configured in nuget.config | ||
999.* are the 'special' version number for local builds --> | ||
<ItemGroup Condition=" '$(Configuration)' == 'Debug' "> | ||
<PackageReference Include="AsyncAPI.Saunter.Generator.Build" Version="999.*"> | ||
<PrivateAssets>all</PrivateAssets> | ||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | ||
</PackageReference> | ||
</ItemGroup> | ||
|
||
<!-- For release: use a real published nuget package --> | ||
<ItemGroup Condition=" '$(Configuration)' == 'Release' "> | ||
<PackageReference Include="AsyncAPI.Saunter.Generator.Build" Version="*-*"> | ||
<PrivateAssets>all</PrivateAssets> | ||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | ||
</PackageReference> | ||
</ItemGroup> | ||
|
||
<ItemGroup> | ||
<ProjectReference Include="..\..\src\Saunter\Saunter.csproj" /> | ||
</ItemGroup> | ||
|
||
<ItemGroup> | ||
<Folder Include="specs\" /> | ||
|
||
<Compile Include="../StreetlightsAPI/API.cs" /> | ||
<Compile Include="../StreetlightsAPI/Messaging.cs" /> | ||
|
||
<None Include="../StreetlightsAPI/nlog.config"> | ||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | ||
</None> | ||
</ItemGroup> | ||
|
||
<ItemGroup> | ||
<PackageReference Include="NLog" Version="5.3.2" /> | ||
<PackageReference Include="NLog.Web.AspNetCore" Version="5.3.11" /> | ||
</ItemGroup> | ||
|
||
</Project> |
19 changes: 19 additions & 0 deletions
19
examples/StreetlightsAPI.AsyncApiSpecFirst/appsettings.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
{ | ||
"Logging": { | ||
"LogLevel": { | ||
"Default": "Information", | ||
"Microsoft": "Warning", | ||
"Microsoft.Hosting.Lifetime": "Information" | ||
} | ||
}, | ||
|
||
"AllowedHosts": "*", | ||
|
||
"Kestrel": { | ||
"EndPoints": { | ||
"Http": { | ||
"Url": "http://localhost:5001" | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
20 changes: 20 additions & 0 deletions
20
src/AsyncAPI.Saunter.Generator.Cli/FromSpec/FromSpecCommand.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
using ConsoleAppFramework; | ||
using LEGO.AsyncAPI; | ||
using LEGO.AsyncAPI.Models; | ||
using Microsoft.Extensions.Logging; | ||
|
||
namespace AsyncAPI.Saunter.Generator.Cli.FromSpecCommand; | ||
|
||
internal class FromSpecCommand(ILogger<FromSpecCommand> logger) | ||
{ | ||
/// <summary> | ||
/// Retrieves AsyncAPI spec from a startup assembly and writes to file. | ||
/// </summary> | ||
/// <param name="specs">The AsyncAPI specification to generate code for. Parameter should include the namespace: namespace,asyncapi.json</param> | ||
[Command("fromspec")] | ||
public int FromSpec(params string[] specs) | ||
{ | ||
logger.LogInformation($"FromSpec(#{specs.Length}): {string.Join(';', specs)}"); | ||
return 0; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters