N.SourceGenerators.UnionTypes 0.3.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package N.SourceGenerators.UnionTypes --version 0.3.0                
NuGet\Install-Package N.SourceGenerators.UnionTypes -Version 0.3.0                
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="N.SourceGenerators.UnionTypes" Version="0.3.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add N.SourceGenerators.UnionTypes --version 0.3.0                
#r "nuget: N.SourceGenerators.UnionTypes, 0.3.0"                
#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.
// Install N.SourceGenerators.UnionTypes as a Cake Addin
#addin nuget:?package=N.SourceGenerators.UnionTypes&version=0.3.0

// Install N.SourceGenerators.UnionTypes as a Cake Tool
#tool nuget:?package=N.SourceGenerators.UnionTypes&version=0.3.0                

N.SourceGenerators.UnionTypes

Discriminated union type source generator

Motivation

C# doesn't support discriminated unions yet. This source generator helps automate writing union types.

Using

Add package reference to N.SourceGenerators.UnionTypes

dotnet add package N.SourceGenerators.UnionTypes

Create a partial class that will be used as a union type

public partial class FooResult
{
}

Add types you want to use in a discriminated union

public record Success(int Value);
public record ValidationError(string Message);
public record NotFoundError;

public partial class FooResult
{
}

Add N.SourceGenerators.UnionTypes.UnionTypeAttribute to a union type.

using N.SourceGenerators.UnionTypes;

public record Success(int Value);
public record ValidationError(string Message);
public record NotFoundError;

[UnionType(typeof(Success))]
[UnionType(typeof(ValidationError))]
[UnionType(typeof(NotFoundError))]
public partial class FooResult
{
}

Examples

All examples can be found in examples project

Implicit conversion

public FooResult ImplicitReturn()
{
    // you can return any union type variant without creating FooResult
    return new NotFoundError();
}

Explicit conversion

public ValidationError ExplicitCast(FooResult result)
{
    return (ValidationError)result;
}

Match method forces you to handle all possible variations

public IActionResult MatchMethod(FooResult result)
{
    return result.Match<IActionResult>(
        success => new OkResult(),
        validationError => new BadRequestResult(),
        notFoundError => new NotFoundResult()
    );
}
There are no supported framework assets in this package.

Learn more about Target Frameworks and .NET Standard.

  • .NETStandard 2.0

    • No dependencies.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on N.SourceGenerators.UnionTypes:

Package Downloads
Zomp.SyncMethodGenerator

Generates synchronized method from async method

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.28.0 3,798 5/2/2024
0.28.0-rc.61 29 5/2/2024
0.28.0-rc.60 22 5/2/2024
0.27.0 1,492 3/19/2024
0.27.0-rc.58 58 3/19/2024
0.27.0-rc.57 76 3/13/2024
0.26.0 32,463 10/26/2023
0.26.0-rc.55 70 11/16/2023
0.26.0-rc.53 76 10/30/2023
0.26.0-rc.52 74 10/30/2023
0.26.0-rc.51 78 10/30/2023
0.26.0-rc.50 68 10/30/2023
0.26.0-rc.48 75 10/26/2023
0.25.3 366 10/18/2023
0.25.3-rc.41 77 10/18/2023
0.25.1-rc.40 331 10/17/2023
0.25.0-rc.39 89 10/17/2023
0.24.0 1,023 10/17/2023
0.24.0-rc.37 125 10/16/2023
0.23.0 711 10/3/2023
0.23.0-rc.35 301 10/2/2023
0.22.0 318 10/2/2023
0.22.0-rc.33 76 10/2/2023
0.21.0 281 10/2/2023
0.21.0-rc.31 78 10/2/2023
0.21.0-rc.30 85 9/28/2023
0.20.0-rc.29 907 9/6/2023
0.20.0-rc.28 59 9/6/2023
0.19.0 671 8/3/2023
0.18.0 522 2/5/2023
0.17.0 361 2/2/2023
0.16.0 331 1/30/2023
0.15.0 346 1/29/2023
0.14.0 342 1/21/2023
0.13.0 358 1/20/2023
0.12.0 389 1/20/2023
0.11.0 363 1/18/2023
0.10.0 362 1/18/2023
0.9.0 359 1/17/2023
0.8.0 352 1/17/2023
0.7.0 335 1/17/2023
0.6.0 334 1/15/2023
0.5.1 361 1/15/2023
0.5.0 382 1/15/2023
0.4.0 390 1/15/2023
0.3.0 409 1/15/2023
0.2.0 397 1/15/2023
0.1.0 463 1/15/2023