ordinary_app_execution_run.bend

bendvy-ecs-core@0.1.0.0 · 53 lines · 0 definitions

1import Base
2import bendvy-ecs-core@0.1.0.0/change_tick.bend as Tick
3import bendvy-ecs-core@0.1.0.0/machine_handler_context.bend as HandlerContext
4import bendvy-ecs-core@0.1.0.0/machine_handler_engine.bend as HandlerEngine
5import bendvy-ecs-core@0.1.0.0/machine_handlers.bend as Handlers
6import bendvy-ecs-core@0.1.0.0/machine.bend as Machine
7import bendvy-ecs-core@0.1.0.0/machine_world.bend as MachineWorld
8import bendvy-ecs-core@0.1.0.0/ordinary_machine_declaration.bend as MachineDecl
9import bendvy-ecs-core@0.1.0.0/ordinary_owned_event_family_publisher.bend as Publisher
10import bendvy-ecs-core@0.1.0.0/ordinary_owned_event_declaration.bend as Events
11import bendvy-ecs-core@0.1.0.0/execution_context.bend as Ctx
12import bendvy-ecs-core@0.1.0.0/trace_facts.bend as Facts
13import bendvy-ecs-core@0.1.0.0/system.bend as Sys
14import bendvy-ecs-core@0.1.0.0/world.bend as W
15import bendvy-ecs-core@0.1.0.0/ordinary_app_registration_run.bend as Run
16import bendvy-ecs-core@0.1.0.0/transaction.bend as T
17import bendvy-ecs-core@0.1.0.0/ordinary_resource_field_system.bend as Field
18import bendvy-ecs-core@0.1.0.0/ordinary_app_resource_field_declaration.bend as D
19import bendvy-ecs-core@0.1.0.0/ordinary_system.bend as Component
20import bendvy-ecs-core@0.1.0.0/ordinary_query_observable.bend as O
21import bendvy-ecs-core@0.1.0.0/compose.bend as Q
22import bendvy-ecs-core@0.1.0.0/inspector.bend as I
23import bendvy-ecs-core@0.1.0.0/ordinary_app_registration_fields.bend as Records
24def outcome(~World:Type,~Error:Data,~Out:Type,trace:Facts.State,result:Sys.Outcome<World,Error,Out>) -> Sys.Outcome<Ctx.Context<World>,Error,Out>:
25  match result:
26    case Sys.Succeeded{world,output}:Sys.Succeeded{Ctx.Context{world,trace},output}
27    case Sys.Failed{world,error}:Sys.Failed{Ctx.Context{world,trace},error}
28def returned(~S:Data,~World:Type,~Args:Type,~Error:Data,~Out:Type,~Token:Type,result:Run.TransportResult<S,World,Args,Error,Out,Token> & Facts.State) -> Run.TransportResult<S,Ctx.Context<World>,Args,Error,Out,Token>:
29  match result:
30    case (Run.Completed{token,fields,value},trace):Run.Completed{token,fields,outcome(~World,~Error,~Out,trace,value)}
31    case (Run.RegistrationRejected{token,fields,world,args},trace):Run.RegistrationRejected{token,fields,Ctx.Context{world,trace},args}
32
33# Fact-producing runner and normal Registry share the same declaration/body.
34def resource_transport(~S:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~Args:Type,~Error:Data,~Out:Type,~Value:Data,~declaration:D.Declaration<S,C,R,E,Ops,Value>,~body:@-H:Type -> @-caps:Ops(H) -> Args -> H -> H & (T.Outcome<Error> & Out),token:Records.Token<Sys.Registry<S,C,R,E,Args,Error,Out,Field.runner(~S,~C,~R,~E,~Ops,~Args,~Error,~Out,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body)>>,fields:Records.Fields<S>,trace:Facts.State,world:W.World<S,C,R,E>,args:Args) -> Run.TransportResult<S,W.World<S,C,R,E>,Args,Error,Out,Records.Token<Sys.Registry<S,C,R,E,Args,Error,Out,Field.runner(~S,~C,~R,~E,~Ops,~Args,~Error,~Out,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body)>>> & Facts.State:
35  Run.run_observed(~S,~C,~R,~E,~Args,~Error,~Out,~Field.runner(~S,~C,~R,~E,~Ops,~Args,~Error,~Out,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body),~Field.runner_observed(~S,~C,~R,~E,~Ops,~Args,~Error,~Out,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body),token,fields,trace,world,args)
36def component_transport(~S:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~Args:Data,~Error:Data,~Out:Data,~Value:Data,~query:O.Declaration<S,Q.Frame<S,C,R,E>,Ops(Q.Frame<S,C,R,E>),I.Frame<S,C,R,E>,Value>,~body:@-H:Type -> @-caps:Ops(H) -> Args -> H -> H & (T.Outcome<Error> & Out),token:Records.Token<Sys.Registry<S,C,R,E,Args & Maybe<&2,Tick.Tick>,Q.Error<Error>,List<&2,Out>,Component.observable_runner(~S,~C,~R,~E,~Ops,~Args,~Error,~Out,~Value,~query,~body)>>,fields:Records.Fields<S>,trace:Facts.State,world:W.World<S,C,R,E>,args:Args) -> Run.TransportResult<S,W.World<S,C,R,E>,Args & Maybe<&2,Tick.Tick>,Q.Error<Error>,List<&2,Out>,Records.Token<Sys.Registry<S,C,R,E,Args & Maybe<&2,Tick.Tick>,Q.Error<Error>,List<&2,Out>,Component.observable_runner(~S,~C,~R,~E,~Ops,~Args,~Error,~Out,~Value,~query,~body)>>> & Facts.State:
37  match fields:
38    case Records.Fields{namespace,id,name,access,+cursor,slot,clauses,kind}:Run.run_observed(~S,~C,~R,~E,~(Args & Maybe<&2,Tick.Tick>),~Q.Error<Error>,~List<&2,Out>,~Component.observable_runner(~S,~C,~R,~E,~Ops,~Args,~Error,~Out,~Value,~query,~body),~Component.observable_runner_observed(~S,~C,~R,~E,~Ops,~Args,~Error,~Out,~Value,~query,~body),token,Records.Fields{namespace,id,name,access,cursor,slot,clauses,kind},trace,world,(args,cursor))
39
40def resource_field(~S:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~Args:Type,~Error:Data,~Out:Type,~Value:Data,~declaration:D.Declaration<S,C,R,E,Ops,Value>,~body:@-H:Type -> @-caps:Ops(H) -> Args -> H -> H & (T.Outcome<Error> & Out),token:Records.Token<Sys.Registry<S,C,R,E,Args,Error,Out,Field.runner(~S,~C,~R,~E,~Ops,~Args,~Error,~Out,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body)>>,fields:Records.Fields<S>,context:Ctx.Context<W.World<S,C,R,E>>,args:Args) -> Run.TransportResult<S,Ctx.Context<W.World<S,C,R,E>>,Args,Error,Out,Records.Token<Sys.Registry<S,C,R,E,Args,Error,Out,Field.runner(~S,~C,~R,~E,~Ops,~Args,~Error,~Out,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body)>>>:
41  match context:
42    case Ctx.Context{world,trace}:returned(~S,~W.World<S,C,R,E>,~Args,~Error,~Out,~Records.Token<Sys.Registry<S,C,R,E,Args,Error,Out,Field.runner(~S,~C,~R,~E,~Ops,~Args,~Error,~Out,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body)>>,resource_transport(~S,~C,~R,~E,~Ops,~Args,~Error,~Out,~Value,~declaration,~body,token,fields,trace,world,args))
43
44def component(~S:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~Args:Data,~Error:Data,~Out:Data,~Value:Data,~query:O.Declaration<S,Q.Frame<S,C,R,E>,Ops(Q.Frame<S,C,R,E>),I.Frame<S,C,R,E>,Value>,~body:@-H:Type -> @-caps:Ops(H) -> Args -> H -> H & (T.Outcome<Error> & Out),token:Records.Token<Sys.Registry<S,C,R,E,Args & Maybe<&2,Tick.Tick>,Q.Error<Error>,List<&2,Out>,Component.observable_runner(~S,~C,~R,~E,~Ops,~Args,~Error,~Out,~Value,~query,~body)>>,fields:Records.Fields<S>,context:Ctx.Context<W.World<S,C,R,E>>,args:Args) -> Run.TransportResult<S,Ctx.Context<W.World<S,C,R,E>>,Args & Maybe<&2,Tick.Tick>,Q.Error<Error>,List<&2,Out>,Records.Token<Sys.Registry<S,C,R,E,Args & Maybe<&2,Tick.Tick>,Q.Error<Error>,List<&2,Out>,Component.observable_runner(~S,~C,~R,~E,~Ops,~Args,~Error,~Out,~Value,~query,~body)>>>:
45  match context:
46    case Ctx.Context{world,trace}:returned(~S,~W.World<S,C,R,E>,~(Args & Maybe<&2,Tick.Tick>),~Q.Error<Error>,~List<&2,Out>,~Records.Token<Sys.Registry<S,C,R,E,Args & Maybe<&2,Tick.Tick>,Q.Error<Error>,List<&2,Out>,Component.observable_runner(~S,~C,~R,~E,~Ops,~Args,~Error,~Out,~Value,~query,~body)>>,component_transport(~S,~C,~R,~E,~Ops,~Args,~Error,~Out,~Value,~query,~body,token,fields,trace,world,args))
47
48def publisher(~S:Data,~C:Type,~R:Type,~E:Data,~Recovery:Type,~EventOps:Type -> Type,~builder:Events.Builder(~W.World<S,C,R,E>,~Recovery,~EventOps),~declaration:Events.Declaration<S,W.World<S,C,R,E>,Recovery,EventOps,builder>,~Args:Type,~Error:Data,~Out:Type,~body:@-J:Type -> @-caps:EventOps(J) -> Args -> J -> J & (T.Outcome<Error> & Out),token:Records.Token<Publisher.Registry(~S,~C,~R,~E,~Recovery,~EventOps,~builder,~declaration,~Args,~Error,~Out,~body)>,fields:Records.Fields<S>,context:Ctx.Context<W.World<S,C,R,E>>,args:Args) -> Run.TransportResult<S,Ctx.Context<W.World<S,C,R,E>>,Args,Unit,Publisher.Reply<Error,Out,Recovery>,Records.Token<Publisher.Registry(~S,~C,~R,~E,~Recovery,~EventOps,~builder,~declaration,~Args,~Error,~Out,~body)>>:
49  match context:
50    case Ctx.Context{world,trace}:returned(~S,~W.World<S,C,R,E>,~Args,~Unit,~Publisher.Reply<Error,Out,Recovery>,~Records.Token<Publisher.Registry(~S,~C,~R,~E,~Recovery,~EventOps,~builder,~declaration,~Args,~Error,~Out,~body)>,Run.run_observed(~S,~C,~R,~E,~Args,~Unit,~Publisher.Reply<Error,Out,Recovery>,~Publisher.runner(~S,~C,~R,~E,~Recovery,~EventOps,~builder,~declaration,~Args,~Error,~Out,~body),~Publisher.runner_observed(~S,~C,~R,~E,~Recovery,~EventOps,~builder,~declaration,~Args,~Error,~Out,~body),token,fields,trace,world,args))
51
52def handlers_resource_field(~S:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~Value:Data,~declaration:D.Declaration<S,C,R,E,Ops,Value>,~K:Data,~MachineV:Data,~take:R -> R & Machine.Slot<S,K,MachineV>,~put:R -> Machine.Slot<S,K,MachineV> -> R,~machine:MachineDecl.Declaration<S,K,MachineV,R,take>,~same:MachineV -> MachineV -> Bool,~publish:W.World<S,C,R,E> -> Machine.Transition<MachineV> -> W.World<S,C,R,E>,~body:@-H:Type -> @-caps:Ops(H) -> Handlers.Invocation<MachineV> -> H -> H & (T.Outcome<String> & Unit),owners:Handlers.Owners<S,C,R,E,MachineV,Field.runner(~S,~C,~R,~E,~Ops,~Handlers.Invocation<MachineV>,~String,~Unit,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body)>,context:Ctx.Context<W.World<S,C,R,E>>,captured:Machine.Snapshot<MachineV>) -> HandlerEngine.HandlerResult<Ctx.Context<W.World<S,C,R,E>>,Handlers.Entry<S,C,R,E,MachineV,Field.runner(~S,~C,~R,~E,~Ops,~Handlers.Invocation<MachineV>,~String,~Unit,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body)>,Handlers.Phase>:
53  HandlerContext.run(~S,~C,~R,~E,~MachineV,~Field.runner(~S,~C,~R,~E,~Ops,~Handlers.Invocation<MachineV>,~String,~Unit,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body),~Field.runner_observed(~S,~C,~R,~E,~Ops,~Handlers.Invocation<MachineV>,~String,~Unit,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body),~K,~MachineWorld.take(~S,~K,~MachineV,~C,~R,~E,~take),~MachineWorld.put(~S,~K,~MachineV,~C,~R,~E,~put),~publish,~same,~MachineDecl.name(~S,~K,~MachineV,~R,~take,machine),owners,context,captured)