Arcturus.SmartEnums.CodeGenerator
2026.8.27.364
dotnet add package Arcturus.SmartEnums.CodeGenerator --version 2026.8.27.364
NuGet\Install-Package Arcturus.SmartEnums.CodeGenerator -Version 2026.8.27.364
<PackageReference Include="Arcturus.SmartEnums.CodeGenerator" Version="2026.8.27.364" />
<PackageVersion Include="Arcturus.SmartEnums.CodeGenerator" Version="2026.8.27.364" />
<PackageReference Include="Arcturus.SmartEnums.CodeGenerator" />
paket add Arcturus.SmartEnums.CodeGenerator --version 2026.8.27.364
#r "nuget: Arcturus.SmartEnums.CodeGenerator, 2026.8.27.364"
#:package Arcturus.SmartEnums.CodeGenerator@2026.8.27.364
#addin nuget:?package=Arcturus.SmartEnums.CodeGenerator&version=2026.8.27.364
#tool nuget:?package=Arcturus.SmartEnums.CodeGenerator&version=2026.8.27.364
Arcturus.SmartEnums.CodeGenerator
Source generator for Arcturus.SmartEnums that emits strongly typed smart enum members from an attribute-based declaration.
This package is intended to be consumed as an analyzer, along with the runtime package Arcturus.SmartEnums.
What it generates
When a partial record or partial class is annotated with [SmartEnum(...)], the generator emits a complete smart enum implementation, including:
- static readonly members for each enum state
- a private constructor that accepts the string value
- a
Valuescollection FromValue(string value)TryFromValue(string value, out T? result)[JsonConverter(typeof(SmartEnumJsonConverter<T>))]for System.Text.Json serialization
Usage
Add the package and the runtime package to your project:
dotnet add package Arcturus.SmartEnums
dotnet add package Arcturus.SmartEnums.CodeGenerator
Then declare a partial record:
using Arcturus.SmartEnums;
[SmartEnum(
"Pending=pending",
"InProgress=in_progress",
"Completed=completed",
"Cancelled=cancelled")]
public partial record OrderStatusEnum;
The generator will generate code equivalent to:
public sealed partial record OrderStatusEnum : SmartEnum<OrderStatusEnum>, ISmartEnum<OrderStatusEnum>
{
public static readonly OrderStatusEnum Pending = new("pending");
public static readonly OrderStatusEnum InProgress = new("in_progress");
public static readonly OrderStatusEnum Completed = new("completed");
public static readonly OrderStatusEnum Cancelled = new("cancelled");
private OrderStatusEnum(string value) : base(value) { }
public static OrderStatusEnum FromValue(string value)
{
return value switch
{
"pending" => Pending,
"in_progress" => InProgress,
"completed" => Completed,
"cancelled" => Cancelled,
_ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown OrderStatusEnum value.")
};
}
public static bool TryFromValue(string value, out OrderStatusEnum? result)
{
switch (value)
{
case "pending": result = Pending; return true;
case "in_progress": result = InProgress; return true;
case "completed": result = Completed; return true;
case "cancelled": result = Cancelled; return true;
default: result = null; return false;
}
}
}
Supported syntax
The attribute accepts a list of string entries:
"Name"generates a member namedNameand uses the same string as its backing value."Name=value"generates a member namedNameand storesvalueas the backing string.
Examples:
[SmartEnum("Pending", "Active", "Disabled")]
public partial record Status;
[SmartEnum(
"Pending=pending",
"InProgress=in_progress",
"Completed=completed")]
public partial record OrderStatusEnum;
Notes
- The generated type is
sealed partial. - The generated type derives from
SmartEnum<T>and implementsISmartEnum<T>. - The runtime type is in
Arcturus.SmartEnums. - The generator is meant to be used in consuming projects as a source generator/analyzer.
- For manual implementations, you can also inherit directly from
SmartEnum<T>without using the generator.
License
MIT
| 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. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.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
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2026.8.27.364 | 110 | 8/27/2026 |