UseRoutes extension for app

This commit is contained in:
2024-09-23 17:41:00 +02:00
parent fa2256b5ad
commit f797a613b3
5 changed files with 21 additions and 5 deletions
@@ -6,7 +6,7 @@
<Nullable>enable</Nullable>
<OutputType>Library</OutputType>
<IsPackable>true</IsPackable>
<Version>0.8.2</Version>
<Version>0.8.3</Version>
<Authors>Alexandru Macocian</Authors>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
@@ -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";
@@ -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);
@@ -2,7 +2,7 @@
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<Version>0.8.2</Version>
<Version>0.8.3</Version>
<LangVersion>latest</LangVersion>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Authors>Alexandru Macocian</Authors>
@@ -6,7 +6,7 @@
<Nullable>enable</Nullable>
<OutputType>Library</OutputType>
<IsPackable>true</IsPackable>
<Version>0.8.2</Version>
<Version>0.8.3</Version>
<Authors>Alexandru Macocian</Authors>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>