private static OneOf <StatenodeId, string> StatenodeIdFor(StatenodeId sourceId, Target target) => target.Match <OneOf <StatenodeId, string> >( absolute => absolute.Id, sibling => sourceId.Sibling(sibling.StatenodeName, sibling.ChildStatenodesNames), child => sourceId.Child(child.StatenodeName, child.ChildStatenodesNames), self => sourceId, uniquelyIdentified => uniquelyIdentified.Id);
internal StartDelayedTransitionAction(StatenodeId statenodeId, TimeSpan delay) { StatenodeId = statenodeId; Delay = delay; }
public InitializeEvent(StatenodeId id) => StatenodeId = id; // TODO: probably limit this to Compund & Orthogonal
public DelayedEvent(StatenodeId statenodeId, TimeSpan delay) : base($"{statenodeId}:after:{delay.TotalMilliseconds}") { _statenodeId = statenodeId; Data = delay; }
public DoneEvent(StatenodeId statenodeId) : base($"{statenodeId}.done") => _statenodeId = statenodeId;
internal static ParsedStatenode GetTargetStatenode(this Target target, StatenodeId sourceId, Func <OneOf <StatenodeId, string>, ParsedStatenode> getStatenode) => getStatenode(StatenodeIdFor(sourceId, target));
internal static IEnumerable <ParsedStatenode> GetTargetStatenodes(this IEnumerable <Target> targets, StatenodeId sourceId, Func <OneOf <StatenodeId, string>, ParsedStatenode> getStatenode) => targets.Select(target => getStatenode(StatenodeIdFor(sourceId, target)));
internal static string GetId(this ServiceDefinition serviceDefinition, StatenodeId statenodeId, int serviceIndex) => serviceDefinition.Id.ValueOr($"{statenodeId.String}:service#{serviceIndex}");