using Stateless; namespace MoonlightServers.Daemon.Extensions; public static class StateConfigurationExtensions { public static StateMachine.StateConfiguration OnExitFrom( this StateMachine.StateConfiguration configuration, TTrigger trigger, Action entryAction ) { configuration.OnExit(transition => { if(!transition.Trigger!.Equals(trigger)) return; entryAction.Invoke(); }); return configuration; } public static StateMachine.StateConfiguration OnExitFrom( this StateMachine.StateConfiguration configuration, TTrigger trigger, Action.Transition> entryAction ) { configuration.OnExit(transition => { if(!transition.Trigger!.Equals(trigger)) return; entryAction.Invoke(transition); }); return configuration; } public static StateMachine.StateConfiguration OnExitFromAsync( this StateMachine.StateConfiguration configuration, TTrigger trigger, Func entryAction ) { configuration.OnExitAsync(transition => { if(!transition.Trigger!.Equals(trigger)) return Task.CompletedTask; return entryAction.Invoke(); }); return configuration; } public static StateMachine.StateConfiguration OnExitFromAsync( this StateMachine.StateConfiguration configuration, TTrigger trigger, Func.Transition, Task> entryAction ) { configuration.OnExitAsync(transition => { if(!transition.Trigger!.Equals(trigger)) return Task.CompletedTask; return entryAction.Invoke(transition); }); return configuration; } }