Rop.OneOfExtensionGenerator
1.0.1
See the version list below for details.
dotnet add package Rop.OneOfExtensionGenerator --version 1.0.1
NuGet\Install-Package Rop.OneOfExtensionGenerator -Version 1.0.1
<PackageReference Include="Rop.OneOfExtensionGenerator" Version="1.0.1" />
paket add Rop.OneOfExtensionGenerator --version 1.0.1
#r "nuget: Rop.OneOfExtensionGenerator, 1.0.1"
// Install Rop.OneOfExtensionGenerator as a Cake Addin #addin nuget:?package=Rop.OneOfExtensionGenerator&version=1.0.1 // Install Rop.OneOfExtensionGenerator as a Cake Tool #tool nuget:?package=Rop.OneOfExtensionGenerator&version=1.0.1
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.
- 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);
}
}
- 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);
}
}
}
- 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
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- No dependencies.
NuGet packages (4)
Showing the top 4 NuGet packages that depend on Rop.OneOfExtensionGenerator:
Package | Downloads |
---|---|
Rop.Winforms.ListComboBox
Create compatible Items form ListBox and ComboBox |
|
Rop.Ldap
Aditional helpers for Ldap |
|
Rop.Winforms8.ListComboBox
Create compatible Items form ListBox and ComboBox |
|
Rop.Winforms7.ListComboBox
Helper classes for Winforms 7 |
GitHub repositories
This package is not used by any popular GitHub repositories.