Skip to content

sps014/DiscriminatedUnion

Repository files navigation

DiscriminatedUnion

High performance Compile Time Discriminated Unions for C# , Rust and F# inspired.
This libary require Language Version set to preview.

Nuget reference

dotnet add package TinyUnions

eg.

//code you write to create enum
[Union("ExpressionSyntax")]
public enum ExpressionSyntaxType
{
    [UnionProperty<SyntaxToken>("Number")]
    NumberExpressionSyntax,

    [UnionProperty<ExpressionSyntax>("Left")]
    [UnionProperty<SyntaxToken>("Operator")]
    [UnionProperty<ExpressionSyntax>("Right")]
    BinaryExpressionSyntax
}

equivalent Code as compared to F# or Rust

enum ExpressionSyntax
{
   NumberExpressionSyntax(SyntaxToken Number),
   BinaryExpressionSyntax(ExpressionSyntax Left,SyntaxToken Operator,ExpressionSyntax Right);
}

Pattern Matching

//create instance
ExpressionSyntax syntax = new ExpressionSyntax.NumberExpressionSyntax(new SyntaxToken(Value: "jkkjkj"));

if(syntax is ExpressionSyntax.NumberExpressionSyntax num)
{
   Console.WriteLine(num.Number);
}
else if(syntax is ExpressionSyntax.BinaryExpressionSyntax expr)
{
     Console.WriteLine(expr.Left+" "+ expr.Right);
}

//or
switch(syntax.Is)
{
    case ExpressionSyntaxType.NumberExpressionSyntax:
        var num=syntax.AsNumberExpressionSyntax();
        Console.WriteLine("Number Expression"+num.Number);
        break;
    case ExpressionSyntaxType.BinaryExpressionSyntax:
        Console.WriteLine("Binary Expression");
        break;
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages