public record ComponentStatus {
private ComponentStatus(int Value) {
private static Active active = new Active();
private static Disabled disabled = new Disabled();
private static Pending pending = new Pending();
private static Deleted deleted = new Deleted();
internal record Pending(): ComponentStatus(0) {
public Active ToActive() => active;
public record Active(): ComponentStatus(1) {
public Disabled ToDisabled() => disabled;
public record Disabled(): ComponentStatus(2) {
public Active ToActive() => active;
public Deleted ToDeleted() => deleted;
public record Deleted(): ComponentStatus(3);
public static ComponentStatus Initial() {
public static void Main(string[] args)
var Status = ComponentStatus.Initial();
case ComponentStatus.Pending pending: {
Status = pending.ToActive();
case ComponentStatus.Active active: {
Status = active.ToDisabled();
case ComponentStatus.Disabled disabled: {
Status = disabled.ToActive();
Status = disabled.ToDeleted();
case ComponentStatus.Deleted deleted: {