В связи с недавним обсуждением о том как плохо выставлять наружу public instance поля, да еще и в камальКейзе именованные предлагаю следующее решение.
На входе имеем:
variant X
{
| Foo { a : string; mutable b : int }
}
На выходе:
abstract class X
{
public sealed class Foo : X
{
private a : stirng;
[VariantOptionField("a", 0)]
public A : string { get { a } }
private mutable b : int;
[VariantOptionField("b", 1)]
public B : int { get { b } set { b = value } }
public this(a : string, b : int) { this.a = a; this.b = b; }
}
}
Атрибут VariantOptionField содержит имя поля при объявлении а также его позицию.
Имя свойства генерируется по правилам макроса Accessor: _some____foo_bar -> SomeFooBar.