Scribbly.Stencil.Generator 0.1.1

Suggested Alternatives

Scribbly.Stencil 0.1.4

Additional Details

Scribbly.Stencil.Generator is now part of Scribbly.Stencil and should be removed from your project starting with version 0.1.4

There is a newer version of this package available.
See the version list below for details.
dotnet add package Scribbly.Stencil.Generator --version 0.1.1
                    
NuGet\Install-Package Scribbly.Stencil.Generator -Version 0.1.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Scribbly.Stencil.Generator" Version="0.1.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Scribbly.Stencil.Generator" Version="0.1.1" />
                    
Directory.Packages.props
<PackageReference Include="Scribbly.Stencil.Generator" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Scribbly.Stencil.Generator --version 0.1.1
                    
#r "nuget: Scribbly.Stencil.Generator, 0.1.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Scribbly.Stencil.Generator@0.1.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Scribbly.Stencil.Generator&version=0.1.1
                    
Install as a Cake Addin
#tool nuget:?package=Scribbly.Stencil.Generator&version=0.1.1
                    
Install as a Cake Tool

scribbly_banner.png

GitHub GitHub all releases Nuget GitHub issues GitHub Repo stars GitHub forks GitHub last commit (branch)

Scribbly Stencil

A framework for organizing and generating minimal API endpoints.

Static Badge Static Badge Static Badge

Table of Contents

  1. 🎁 Packages
  2. 💪 Groups
  3. 🛒 Endpoints
  4. 🥣 Cookbook

Example

Below is a brief snip of code to get you started before reading more.

  1. Add a reference to the Scribbly.Stencil package and annotate a method on a partial static class.
[EndpointGroup("/lunch")]
public static partial class LunchGroup
{
    // Annotate any method signature with the VerbEndpoint attribute
    [GetEndpoint("/{id}", "Get Lunch", "Fetches the current lunch for the provided restaurant ID.")]
    private static IResult GetLunchMenu(HttpContext context, string id)
    {
        return Results.Ok(id);
    }
    
    [PostEndpoint("/{id}", "Get Lunch", "Fetches the current lunch for the provided restaurant ID.")]
    private static IResult PostLunchMenu(HttpContext context, string id, LunchItem request)
    {
        return Results.Ok(request);
    }
}

Scribbly.Stencil will generate a few things for you behind the Scenes

  1. An HTTP Endpoint Registration Method
public static IEndpointRouteBuilder MapDinnerGroupPostLunchMenuEndpoint(this IEndpointRouteBuilder builder)
{
    builder.MapPost("/{id}", PostLunchMenu);
    return builder;
}
  1. And an Endpoint Registry for All Endpoints Mapping endpoints to Groups
public static IEndpointRouteBuilder MapScribblyEndpoints(this IEndpointRouteBuilder builder)
{
    builder.MapLunchGroupGetLunchMenuEndpoint();
    builder.MapLunchGroupPostLunchMenuEndpoint();
    return builder;
} 

  1. Simply Map Your Application
app.MapScribblyEndpoints();

Optionally Add a Group or Route Prefix

app.MapScribblyEndpoints("/api");

Endpoint Groups

Endpoint groups can be created to map several endpoints with common routing and configuration. Scribbly.Stencil will build this routing tree for you behind the scenes. Just create a Group and attached members.

[EndpointGroup("/lunch", "Manage Lunch Menu")]
public partial class LunchGroup
{
}

This will create a routing group. Groups can even be members of other groups. Use the GroupMember<T> to target a group. Your new group will be added to the group specified in the Generic Param.

[EndpointGroup("/menu", "Menu")]
public partial class MenuGroup
{
}

[GroupMember<MenuGroup>]
[EndpointGroup("/lunch", "Manage Lunch Menu")]
public partial class LunchGroup
{
}

Of course you'll need to add endpoints to groups as well yielding a routable endpoint /menu/lunch/{id}

public partial class LunchEndpoints
{
    [GetEndpoint("lunch/{id}")]
    [GroupMember<LunchGroup>]
    private static IResult GetLunchMenu(HttpContext context, [FromRoute] string id)
    {
        return Results.Ok(id);
    }
}

Configuration

While this is great you may need to plug into the route building and override or append configuration to groups.

Simply add the Configure attribute to the class declaration and magic 🐣

group_configure.gif

Your type will now implement a custom interface used by the code generator. This tells Scribbly.Stencil to invoke your configure method allowing you to modify and append the builder.

[Configure]
[GroupMember<ApplicationRoot>]
[EndpointGroup("/lunch", "Manage Lunch Menu")]
public partial class LunchGroup
{
    /// <inheritdoc />
    public void Configure(IEndpointConventionBuilder lunchGroupBuilder)
    {
        applicationRootBuilder.AddEndpointFilter<MyFilter>();
        // .....
    }
}
There are no supported framework assets in this package.

Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.