Rop.OneOfExtensionGenerator 1.0.4

dotnet add package Rop.OneOfExtensionGenerator --version 1.0.4
NuGet\Install-Package Rop.OneOfExtensionGenerator -Version 1.0.4
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="Rop.OneOfExtensionGenerator" Version="1.0.4" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Rop.OneOfExtensionGenerator --version 1.0.4
#r "nuget: Rop.OneOfExtensionGenerator, 1.0.4"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. Copy this into the interactive tool or source code of the script to reference the package.
// Install Rop.OneOfExtensionGenerator as a Cake Addin
#addin nuget:?package=Rop.OneOfExtensionGenerator&version=1.0.4

// Install Rop.OneOfExtensionGenerator as a Cake Tool
#tool nuget:?package=Rop.OneOfExtensionGenerator&version=1.0.4

Rop.OneOfExtensionGenerator

Features

Rop.OneOfExtensionGenerator is a source generator solution to use OneOf variables with static extension classes

Rop.OneOfExtension.Annotations

Interfaces to decorate the static helper classes as a class with OneOf methods.

    [AttributeUsage(AttributeTargets.Class)]
    public class OneOfExtensionAttribute:Attribute
    {
    }
    [AttributeUsage(AttributeTargets.Method)]
    public class OneOfSplitAttribute:Attribute
    {

    }

OneOfExtension decorate the static partial class OneOfSplit decorate the OneOf Methods to split in final methods (one for each oneof generic type )

Rop.OneOfExtensionGenerator

The source generator that create the helper methods. Must be included as:

  • OutputItemType="Analyzer"
  • ReferenceOutputAssembly="false"

Test.OneOfExtensionGenerator

An example to test the generator.

  1. Create a partial static class decorated as "OneOfExtension" and with private methods with first type as "this OneOf<A,B,...>"
[OneOfExtension]
    public static partial class MyHelper{
        [OneOfSplit]
        private static string _WriteValueABC(this OneOf<A, B, C> abc)
        {
            return abc.Match(a => a.WriteValueA, b => b.WriteValueB, c => c.WriteValueC);
        }
        [OneOfSplit]
        private static string _WriteValueAB(this OneOf<A, B> ab)
        {
            return ab.Match(a => a.WriteValueA, b => b.WriteValueB);
        }
    }
  1. Source Generator create Proxy Methods as public static methods for each generic type in the "OneOf" parameter
// Autogenerated code for spliting OneOf Extensions
using OneOf;
using Rop.OneOfExtension.Annotations;
namespace Test.OneOfExtensionGenerator
{
	public static partial class MyHelper
	{
		public static string WriteValueABC(this A abc)
		{
			return _WriteValueABC(abc);
		}
		public static string WriteValueABC(this B abc)
		{
			return _WriteValueABC(abc);
		}
		public static string WriteValueABC(this C abc)
		{
			return _WriteValueABC(abc);
		}
		public static string WriteValueAB(this A ab)
		{
			return _WriteValueAB(ab);
		}
		public static string WriteValueAB(this B ab)
		{
			return _WriteValueAB(ab);
		}
	}
}
  1. Use new extensions methods
var a=new A();
var b=new B();
var c=new C();
Console.WriteLine(a.WriteValueABC());
Console.WriteLine(b.WriteValueABC());
Console.WriteLine(c.WriteValueABC());
Console.WriteLine(a.WriteValueAB());
Console.WriteLine(b.WriteValueAB());

(C)2022 Ramón Ordiales Plaza

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 Rop.OneOfExtensionGenerator:

Package Downloads
Rop.Winforms.ListComboBox

Create compatible Items form ListBox and ComboBox

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.4 162 3/18/2022
1.0.3 162 2/22/2022
1.0.1 155 2/21/2022