N.SourceGenerators.UnionTypes
0.3.0
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
<PackageReference Include="N.SourceGenerators.UnionTypes" Version="0.3.0" />
<PackageVersion Include="N.SourceGenerators.UnionTypes" Version="0.3.0" />
<PackageReference Include="N.SourceGenerators.UnionTypes" />
paket add N.SourceGenerators.UnionTypes --version 0.3.0
#r "nuget: N.SourceGenerators.UnionTypes, 0.3.0"
#:package N.SourceGenerators.UnionTypes@0.3.0
#addin nuget:?package=N.SourceGenerators.UnionTypes&version=0.3.0
#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()
);
}
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 | 16,911 | 5/2/2024 |
| 0.28.0-rc.61 | 75 | 5/2/2024 |
| 0.28.0-rc.60 | 48 | 5/2/2024 |
| 0.27.0 | 1,710 | 3/19/2024 |
| 0.27.0-rc.58 | 101 | 3/19/2024 |
| 0.27.0-rc.57 | 128 | 3/13/2024 |
| 0.26.0 | 63,191 | 10/26/2023 |
| 0.26.0-rc.55 | 111 | 11/16/2023 |
| 0.26.0-rc.53 | 120 | 10/30/2023 |
| 0.26.0-rc.52 | 93 | 10/30/2023 |
| 0.26.0-rc.51 | 105 | 10/30/2023 |
| 0.26.0-rc.50 | 91 | 10/30/2023 |
| 0.26.0-rc.48 | 134 | 10/26/2023 |
| 0.25.3 | 418 | 10/18/2023 |
| 0.25.3-rc.41 | 107 | 10/18/2023 |
| 0.25.1-rc.40 | 359 | 10/17/2023 |
| 0.25.0-rc.39 | 118 | 10/17/2023 |
| 0.24.0 | 1,076 | 10/17/2023 |
| 0.24.0-rc.37 | 174 | 10/16/2023 |
| 0.23.0 | 761 | 10/3/2023 |
| 0.23.0-rc.35 | 335 | 10/2/2023 |
| 0.22.0 | 369 | 10/2/2023 |
| 0.22.0-rc.33 | 106 | 10/2/2023 |
| 0.21.0 | 333 | 10/2/2023 |
| 0.21.0-rc.31 | 131 | 10/2/2023 |
| 0.21.0-rc.30 | 109 | 9/28/2023 |
| 0.20.0-rc.29 | 950 | 9/6/2023 |
| 0.20.0-rc.28 | 128 | 9/6/2023 |
| 0.19.0 | 742 | 8/3/2023 |
| 0.18.0 | 616 | 2/5/2023 |
| 0.17.0 | 455 | 2/2/2023 |
| 0.16.0 | 426 | 1/30/2023 |
| 0.15.0 | 463 | 1/29/2023 |
| 0.14.0 | 448 | 1/21/2023 |
| 0.13.0 | 496 | 1/20/2023 |
| 0.12.0 | 494 | 1/20/2023 |
| 0.11.0 | 466 | 1/18/2023 |
| 0.10.0 | 497 | 1/18/2023 |
| 0.9.0 | 491 | 1/17/2023 |
| 0.8.0 | 443 | 1/17/2023 |
| 0.7.0 | 455 | 1/17/2023 |
| 0.6.0 | 465 | 1/15/2023 |
| 0.5.1 | 458 | 1/15/2023 |
| 0.5.0 | 474 | 1/15/2023 |
| 0.4.0 | 515 | 1/15/2023 |
| 0.3.0 | 536 | 1/15/2023 |
| 0.2.0 | 525 | 1/15/2023 |
| 0.1.0 | 565 | 1/15/2023 |