Skip to content

bnayae/Bnaya.TypePatterns.Generators

Repository files navigation

TypePatterns Generators

This package show how to mimic Typescropt's Utility Types using Source Code Generator.

[Partial]
public readonly partial record struct RecStruct(int? Value, string Name)
{
    public required int Quantity { get; init; }
    public string Tag { get; init; } = string.Empty;

    public string Description => $"{Name}: {Quantity}";
}

Will generate:

public record struct RecStructNullable
{
	public int? Value{ get; init; }
	public string? Name{ get; init; }
	public int? Quantity{ get; init; }
	public string? Tag{ get; init; }
}

And

partial record struct RecStruct
{
	public static RecStruct operator +(RecStruct a, RecStructNullable b)
	{
		var result = a with {
			Value = b.Value ?? a.Value,
			Name = b.Name ?? a.Name,
			Quantity = b.Quantity ?? a.Quantity,
			Tag = b.Tag ?? a.Tag,
		};
		return result;
	}
}

As result, the following test, pass.

[Fact]
public void RecStruct1_Test()
{
    var r = new RecStruct1 { Value = -150, Name = "Be'ery 😞", Quantity = -150 };
    var rn = new RecStruct1Nullable { Value = -160 };

    var r2 = r + rn;

    Assert.Equal(r.Name, r2.Name);
    Assert.Equal(r.Quantity, r2.Quantity);
    Assert.Equal(rn.Value, r2.Value);
}

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages