Skip to content

Serdan/AutoClosedUnionGenerator

Repository files navigation

AutoClosedUnionGenerator

This package includes a dependency on ExhaustiveMatching.Analyzer

The following:

[AutoClosed]
public partial record AgentMessage
{
    partial record ListProjectsMessage;

    partial record OpenProjectMessage(string ProjectName);

    partial record ListProjectDirectoryMessage(string ProjectName, string Path);
}

Generates this:

[Closed(typeof(ListProjectsMessage), typeof(OpenProjectMessage), typeof(ListProjectDirectoryMessage))]
abstract public partial record AgentMessage
{
    private AgentMessage() { }

    public sealed partial record ListProjectsMessage: AgentMessage;

    public sealed partial record OpenProjectMessage: AgentMessage;

    public sealed partial record ListProjectDirectoryMessage: AgentMessage;

    public static partial class Cons
    {
        public static AgentMessage NewListProjectsMessage { get; } = new ListProjectsMessage();

        public static AgentMessage NewOpenProjectMessage(string ProjectName) => new OpenProjectMessage(ProjectName);

        public static AgentMessage NewListProjectDirectoryMessage(string ProjectName, string Path) => new ListProjectDirectoryMessage(ProjectName, Path);
    }
}

Support for JSON serialization will be generated if true is passed to the attribute constructor. This does NOT work with generic unions (mainly a question of will, as it should be relatively easy to implement).

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages