diff --git a/Net.Sdk.Web.Extensions.Azure/Net.Sdk.Web.Extensions.Azure.csproj b/Net.Sdk.Web.Extensions.Azure/Net.Sdk.Web.Extensions.Azure.csproj index c0f3590..f674291 100644 --- a/Net.Sdk.Web.Extensions.Azure/Net.Sdk.Web.Extensions.Azure.csproj +++ b/Net.Sdk.Web.Extensions.Azure/Net.Sdk.Web.Extensions.Azure.csproj @@ -6,7 +6,7 @@ enable Library true - 0.8.2 + 0.8.3 Alexandru Macocian LICENSE true diff --git a/Net.Sdk.Web.Extensions.SourceGenerators/Constants.cs b/Net.Sdk.Web.Extensions.SourceGenerators/Constants.cs index c18d963..a5a3ff7 100644 --- a/Net.Sdk.Web.Extensions.SourceGenerators/Constants.cs +++ b/Net.Sdk.Web.Extensions.SourceGenerators/Constants.cs @@ -70,6 +70,7 @@ public static class Constants public const string PatternPropertyName = "Pattern"; + public const string UseRoutesMethodName = "UseRoutes"; public const string EndpointRouteBuilderExtensionsName = "EndpointRouteBuilderExtensions"; public const string IEndpointRouteBuilderTypeName = "IEndpointRouteBuilder"; public const string WebApplicationBuilderExtensionsName = "WebApplicationBuilderExtension"; diff --git a/Net.Sdk.Web.Extensions.SourceGenerators/MapEndpointGenerator.cs b/Net.Sdk.Web.Extensions.SourceGenerators/MapEndpointGenerator.cs index 4907aac..5f0025e 100644 --- a/Net.Sdk.Web.Extensions.SourceGenerators/MapEndpointGenerator.cs +++ b/Net.Sdk.Web.Extensions.SourceGenerators/MapEndpointGenerator.cs @@ -5,7 +5,6 @@ using Sybil; using System; using System.Collections.Generic; using System.Collections.Immutable; -using System.Diagnostics; using System.Linq; using System.Text; @@ -72,7 +71,13 @@ public class MapEndpointGenerator : IIncrementalGenerator .WithModifiers($"{Constants.Public} {Constants.Static}"); namespaceBuilder.WithClass(extensionClassBuilder); - foreach(var classDeclarationSyntax in classes) + var useRoutesMethodBuilder = SyntaxBuilder.CreateMethod(Constants.IEndpointRouteBuilderTypeName, Constants.UseRoutesMethodName) + .WithThisParameter(Constants.IEndpointRouteBuilderTypeName, Constants.BuilderParameterName) + .WithModifiers($"{Constants.Public} {Constants.Static}"); + extensionClassBuilder.WithMethod(useRoutesMethodBuilder); + var useRoutesBody = new StringBuilder(); + + foreach (var classDeclarationSyntax in classes) { if (classDeclarationSyntax is null) { @@ -90,38 +95,48 @@ public class MapEndpointGenerator : IIncrementalGenerator if (attributes.FirstOrDefault(a => a.Name.ToString() == Constants.GetAttributeName || a.Name.ToString() == Constants.GetAttributeShortName) is AttributeSyntax getAttributeSyntax) { + var methodName = $"MapGet{classDeclarationSyntax.Identifier}"; var methodBuilder = GetMethodBuilderByType("Get", classDeclarationSyntax, getAttributeSyntax, compilation, attributes, routeUsings); if (methodBuilder is not null) { + useRoutesBody.AppendLine($"{methodName}(builder);"); extensionClassBuilder.WithMethod(methodBuilder); } } else if (attributes.FirstOrDefault(a => a.Name.ToString() == Constants.PostAttributeName || a.Name.ToString() == Constants.PostAttributeShortName) is AttributeSyntax postAttributeSyntax) { + var methodName = $"MapPost{classDeclarationSyntax.Identifier}"; var methodBuilder = GetMethodBuilderByType("Post", classDeclarationSyntax, postAttributeSyntax, compilation, attributes, routeUsings); if (methodBuilder is not null) { + useRoutesBody.AppendLine($"{methodName}(builder);"); extensionClassBuilder.WithMethod(methodBuilder); } } else if (attributes.FirstOrDefault(a => a.Name.ToString() == Constants.PutAttributeName || a.Name.ToString() == Constants.PutAttributeShortName) is AttributeSyntax putAttributeSyntax) { + var methodName = $"MapPut{classDeclarationSyntax.Identifier}"; var methodBuilder = GetMethodBuilderByType("Put", classDeclarationSyntax, putAttributeSyntax, compilation, attributes, routeUsings); if (methodBuilder is not null) { + useRoutesBody.AppendLine($"{methodName}(builder);"); extensionClassBuilder.WithMethod(methodBuilder); } } else if (attributes.FirstOrDefault(a => a.Name.ToString() == Constants.DeleteAttributeName || a.Name.ToString() == Constants.DeleteAttributeShortName) is AttributeSyntax deleteAttributeSyntax) { + var methodName = $"MapDelete{classDeclarationSyntax.Identifier}"; var methodBuilder = GetMethodBuilderByType("Delete", classDeclarationSyntax, deleteAttributeSyntax, compilation, attributes, routeUsings); if (methodBuilder is not null) { + useRoutesBody.AppendLine($"{methodName}(builder);"); extensionClassBuilder.WithMethod(methodBuilder); } } } + useRoutesBody.AppendLine("return builder;"); + useRoutesMethodBuilder.WithBody(useRoutesBody.ToString()); foreach(var classUsing in routeUsings) { builder.WithUsing(classUsing); diff --git a/Net.Sdk.Web.Extensions.SourceGenerators/Net.Sdk.Web.Extensions.SourceGenerators.csproj b/Net.Sdk.Web.Extensions.SourceGenerators/Net.Sdk.Web.Extensions.SourceGenerators.csproj index 1d3c109..8e82bed 100644 --- a/Net.Sdk.Web.Extensions.SourceGenerators/Net.Sdk.Web.Extensions.SourceGenerators.csproj +++ b/Net.Sdk.Web.Extensions.SourceGenerators/Net.Sdk.Web.Extensions.SourceGenerators.csproj @@ -2,7 +2,7 @@ netstandard2.0 - 0.8.2 + 0.8.3 latest true Alexandru Macocian diff --git a/Net.Sdk.Web.Extensions/Net.Sdk.Web.Extensions.csproj b/Net.Sdk.Web.Extensions/Net.Sdk.Web.Extensions.csproj index 45c83b2..1cc8b14 100644 --- a/Net.Sdk.Web.Extensions/Net.Sdk.Web.Extensions.csproj +++ b/Net.Sdk.Web.Extensions/Net.Sdk.Web.Extensions.csproj @@ -6,7 +6,7 @@ enable Library true - 0.8.2 + 0.8.3 Alexandru Macocian LICENSE true