Rop.OneOfExtension.Annotations
1.0.2
dotnet add package Rop.OneOfExtension.Annotations --version 1.0.2
NuGet\Install-Package Rop.OneOfExtension.Annotations -Version 1.0.2
<PackageReference Include="Rop.OneOfExtension.Annotations" Version="1.0.2" />
paket add Rop.OneOfExtension.Annotations --version 1.0.2
#r "nuget: Rop.OneOfExtension.Annotations, 1.0.2"
// Install Rop.OneOfExtension.Annotations as a Cake Addin
#addin nuget:?package=Rop.OneOfExtension.Annotations&version=1.0.2
// Install Rop.OneOfExtension.Annotations as a Cake Tool
#tool nuget:?package=Rop.OneOfExtension.Annotations&version=1.0.2
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
Product | Versions |
---|---|
.NET | net5.0 net5.0-windows net6.0 net6.0-android net6.0-ios net6.0-maccatalyst net6.0-macos net6.0-tvos net6.0-windows net7.0 net7.0-android net7.0-ios net7.0-maccatalyst net7.0-macos net7.0-tvos net7.0-windows |
.NET Core | netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1 |
.NET Standard | netstandard2.0 netstandard2.1 |
.NET Framework | net461 net462 net463 net47 net471 net472 net48 |
MonoAndroid | monoandroid |
MonoMac | monomac |
MonoTouch | monotouch |
Tizen | tizen40 tizen60 |
Xamarin.iOS | xamarinios |
Xamarin.Mac | xamarinmac |
Xamarin.TVOS | xamarintvos |
Xamarin.WatchOS | xamarinwatchos |
-
.NETStandard 2.0
- No dependencies.
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Rop.OneOfExtension.Annotations:
Package | Downloads |
---|---|
Rop.Winforms.ListComboBox
Create compatible Items form ListBox and ComboBox |
|
Rop.Ldap
Aditional helpers for Ldap |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.0.2 | 168 | 2/21/2022 |