using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.Json.Serialization; using System.Threading.Tasks; namespace Beam.Temporary.Cli { public class StateChangerFactory { [JsonIgnore] public IStateChangeBehaviour Behavior => FactoryTable[StateChangerKey](); [JsonInclude] public string StateChangerKey { get; set; } [JsonConstructor] public StateChangerFactory(string stateChangerKey) { if (!Keys.Contains(stateChangerKey)) throw new ArgumentException($"{stateChangerKey} not in keys list", nameof(stateChangerKey)); StateChangerKey = stateChangerKey; } public static Dictionary> FactoryTable = new() { { LastAsNumber, () => CommonStateChangers.LastAsNumber }, { LastAsNumberPrefixed, () => CommonStateChangers.NthAsNumber(^1, true) }, { Constant, () => CommonStateChangers.Constant }, }; public HashSet Keys = [LastAsNumber, LastAsNumberPrefixed, Constant]; public const string LastAsNumber = "LastAsNumber"; public const string LastAsNumberPrefixed = "LastAsNumberPrefixed"; public const string Constant = "Constant"; } }