Dunet 1.0.0
See the version list below for details.
dotnet add package Dunet --version 1.0.0
NuGet\Install-Package Dunet -Version 1.0.0
<PackageReference Include="Dunet" Version="1.0.0" />
paket add Dunet --version 1.0.0
#r "nuget: Dunet, 1.0.0"
// Install Dunet as a Cake Addin #addin nuget:?package=Dunet&version=1.0.0 // Install Dunet as a Cake Tool #tool nuget:?package=Dunet&version=1.0.0
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
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.CodeAnalysis.CSharp (>= 4.2.0)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Dunet:
Package | Downloads |
---|---|
ZeroC.Slice
Slice for C#. |
|
Xenial.Identity.Client
Package Description |
GitHub repositories (2)
Showing the top 2 popular GitHub repositories that depend on Dunet:
Repository | Stars |
---|---|
domn1995/dunet
C# discriminated union source generator
|
|
icerpc/icerpc-csharp
A C# RPC framework built for QUIC, with bidirectional streaming, first-class async/await, and Protobuf support.
|
Version | Downloads | Last updated | |
---|---|---|---|
1.11.2 | 46,347 | 1/29/2024 | |
1.11.1 | 312 | 1/27/2024 | |
1.11.0 | 8,751 | 1/4/2024 | |
1.11.0-alpha1 | 348 | 1/4/2024 | |
1.10.0 | 10,820 | 11/2/2023 | |
1.9.0 | 4,481 | 9/13/2023 | |
1.8.0 | 13,766 | 5/16/2023 | |
1.7.2-pre1 | 1,428 | 5/12/2023 | |
1.7.1 | 7,654 | 2/17/2023 | |
1.7.0 | 1,470 | 1/23/2023 | |
1.6.0 | 3,079 | 1/3/2023 | |
1.6.0-preview1 | 1,176 | 1/3/2023 | |
1.5.0 | 11,259 | 11/13/2022 | |
1.4.2 | 66,585 | 11/5/2022 | |
1.4.1 | 1,502 | 11/5/2022 | |
1.4.1-preview2 | 1,407 | 11/5/2022 | |
1.4.1-preview1 | 1,391 | 11/5/2022 | |
1.4.0 | 2,023 | 10/6/2022 | |
1.3.0 | 1,503 | 9/22/2022 | |
1.2.0 | 1,802 | 8/27/2022 | |
1.1.0 | 3,225 | 7/11/2022 | |
1.0.2 | 1,675 | 7/8/2022 | |
1.0.1 | 1,649 | 7/6/2022 | |
1.0.0 | 1,060 | 6/27/2022 | |
0.5.0 | 907 | 6/26/2022 | |
0.4.0 | 907 | 6/26/2022 | |
0.3.0 | 914 | 6/24/2022 | |
0.2.2 | 888 | 6/18/2022 | |
0.2.1 | 922 | 6/16/2022 | |
0.2.0 | 926 | 6/16/2022 | |
0.1.3 | 935 | 6/15/2022 | |
0.1.2 | 907 | 6/13/2022 | |
0.1.1 | 938 | 6/13/2022 | |
0.1.0 | 987 | 6/13/2022 |
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.