mirror of
https://github.com/AlexMacocian/Net.Sdk.Web.Extensions.git
synced 2026-07-24 03:56:27 +00:00
Setup route map source generator
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user