Setup route map source generator

This commit is contained in:
2024-09-23 13:38:20 +02:00
parent 0899b2d63b
commit 3e3845d414
15 changed files with 618 additions and 10 deletions
@@ -0,0 +1,43 @@
using Microsoft.CodeAnalysis;
using Sybil;
namespace Net.Sdk.Web.Extensions.SourceGenerators;
[Generator(LanguageNames.CSharp)]
#nullable enable
public class RouteInterfaceGenerator : IIncrementalGenerator
{
public void Initialize(IncrementalGeneratorInitializationContext context)
{
context.RegisterPostInitializationOutput(context =>
{
GenerateInterface(context);
});
}
private static void GenerateInterface(IncrementalGeneratorPostInitializationContext context)
{
var builder = SyntaxBuilder.CreateCompilationUnit()
.WithNamespace(SyntaxBuilder.CreateNamespace(Constants.Namespace)
.WithInterface(SyntaxBuilder.CreateInterface(Constants.RouteInterface)
.WithTypeParameter(SyntaxBuilder.CreateTypeParameter(Constants.RouteTypeParameter))
.WithTypeParameterConstraint(SyntaxBuilder.CreateTypeParameterConstraint(Constants.RouteTypeParameter)
.WithClass())
.WithMethod(SyntaxBuilder.CreateMethod(Constants.PreProcessRequestReturnType, Constants.PreProcessRequestMethodName)
.WithModifier(Constants.Public)
.WithParameter(Constants.HttpContextTypeName, Constants.HttpContextParameterName)
.WithParameter(Constants.CancellationTokenTypeName, Constants.CancellationTokenParameterName)
.WithNoBody())
.WithMethod(SyntaxBuilder.CreateMethod(Constants.HandleRequestReturnType, Constants.HandleRequestMethodName)
.WithModifier(Constants.Public)
.WithParameter($"{Constants.RouteTypeParameter}?", Constants.RequestParameterName)
.WithParameter(Constants.CancellationTokenTypeName, Constants.CancellationTokenParameterName)
.WithNoBody())));
var syntax = builder.Build();
var source = syntax.ToFullString();
context.AddSource($"{Constants.RouteFileName}.g", source);
}
}
#nullable disable