Dunet 1.0.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package Dunet --version 1.0.2
NuGet\Install-Package Dunet -Version 1.0.2
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="Dunet" Version="1.0.2">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Dunet --version 1.0.2
#r "nuget: Dunet, 1.0.2"
#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 Dunet as a Cake Addin
#addin nuget:?package=Dunet&version=1.0.2

// Install Dunet as a Cake Tool
#tool nuget:?package=Dunet&version=1.0.2

Dunet

Dunet is a simple source generator for discriminated unions in C#.

Install

  • NuGet: dotnet add package dunet

Usage

// 1. Import the namespace.
using Dunet;

// 2. Add the `Union` attribute to a partial record.
[Union]
partial record Shape
{
    // 3. Define the union members as inner partial records.
    partial record Circle(double Radius);
    partial record Rectangle(double Length, double Width);
    partial record Triangle(double Base, double Height);
}

// 4. Use the union members.
var shape = new Shape.Rectangle(3, 4);
var area = shape.Match(
    circle => 3.14 * circle.Radius * circle.Radius,
    rectangle => rectangle.Length * rectangle.Width,
    triangle => triangle.Base * triangle.Height / 2
);
Console.WriteLine(area); // "12"

Generics Support

Use generics for more advanced union types. For example, an option monad:

// 1. Import the namespace.
using Dunet;

// 2. Add the `Union` attribute to a partial record.
// 3. Add one or more type arguments to the union record.
[Union]
partial record Option<T>
{
    partial record Some(T Value);
    partial record None();
}

// 4. Use the union members.
static Option<int> ParseInt(string? value) =>
    int.TryParse(value, out var number)
        ? Option<int>.Some(number)
        : Option<int>.None();

static string GetOutput(Option<int> number) =>
    number.Match(
        some => some.Value.ToString(),
        none => "Invalid input!"
    );

var input = ParseInt(Console.ReadLine()); // User inputs "not a number".
Console.WriteLine(GetOutput(input)); // "Invalid input!"

input = ParseInt(Console.ReadLine()); // User inputs "12345".
Console.WriteLine(GetOutput(input)); // "12345".

Samples

There are no supported framework assets in this package.

Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Dunet:

Package Downloads
ZeroC.Slice The ID prefix of this package has been reserved for one of the owners of this package by NuGet.org.

Slice for C#.

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on Dunet:

Repository Stars
domn1995/dunet
C# discriminated union source generator
Version Downloads Last updated
1.11.2 10,830 1/29/2024
1.11.1 278 1/27/2024
1.11.0 7,379 1/4/2024
1.11.0-alpha1 323 1/4/2024
1.10.0 10,112 11/2/2023
1.9.0 4,453 9/13/2023
1.8.0 10,635 5/16/2023
1.7.2-pre1 1,395 5/12/2023
1.7.1 6,786 2/17/2023
1.7.0 1,446 1/23/2023
1.6.0 3,053 1/3/2023
1.6.0-preview1 1,156 1/3/2023
1.5.0 10,986 11/13/2022
1.4.2 32,047 11/5/2022
1.4.1 1,475 11/5/2022
1.4.1-preview2 1,387 11/5/2022
1.4.1-preview1 1,368 11/5/2022
1.4.0 1,988 10/6/2022
1.3.0 1,464 9/22/2022
1.2.0 1,775 8/27/2022
1.1.0 2,663 7/11/2022
1.0.2 1,645 7/8/2022
1.0.1 1,624 7/6/2022
1.0.0 1,028 6/27/2022
0.5.0 880 6/26/2022
0.4.0 875 6/26/2022
0.3.0 889 6/24/2022
0.2.2 860 6/18/2022
0.2.1 891 6/16/2022
0.2.0 903 6/16/2022
0.1.3 907 6/15/2022
0.1.2 878 6/13/2022
0.1.1 911 6/13/2022
0.1.0 930 6/13/2022

1.0.2 - Support multiple unions with the same name.
1.0.1 - Configure Dunet as development dependency.
1.0.0 - Production release.
0.5.0 - Generate dedicated match method on union records.
0.4.0 - Add support for declaring a union with records.
0.3.0 - Support complex types in union members.
0.2.2 - Add source generator DLL to package.
0.2.1 - Update readme.
0.2.0 - Generate dedicated match method.
0.1.3 - Add support for declaring unions inside top level programs.
0.1.2 - Simplify generated source.
0.1.1 - Support any number of interfaces.
0.1.0 - Initial release.