ordinary_app_leaf_run.bend
bendvy-ecs-core@0.1.0.0 · 21 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/ordinary_app_records.bend as Leaf
4import bendvy-ecs-core@0.1.0.0/ordinary_app_registration_fields.bend as Stored
5import bendvy-ecs-core@0.1.0.0/ordinary_app_registration_run.bend as Run
6import bendvy-ecs-core@0.1.0.0/ordinary_app_dispatch_result.bend as D
7import bendvy-ecs-core@0.1.0.0/world.bend as W
8import bendvy-ecs-core@0.1.0.0/system.bend as Sys
9def returned(~S:Data,~C:Type,~R:Type,~E:Data,~H:Type,~Args:Type,~Error:Data,~Out:Type,~runner:W.World<S,C,R,E> -> Args -> Sys.Outcome<W.World<S,C,R,E>,Error,Out>,~RA:Type,~CE:Data,~RE:Data,~RO:Type,put:Leaf.Record<S,Stored.Token<Sys.Registry<S,C,R,E,Args,Error,Out,runner>>> -> H,convert:Sys.Outcome<W.World<S,C,R,E>,Error,Out> -> Sys.Outcome<W.World<S,C,R,E>,D.Error<CE,RE>,D.Output<Unit,RO>>,rejected:Args -> D.Arguments<Unit,RA>,result:Run.TransportResult<S,W.World<S,C,R,E>,Args,Error,Out,Stored.Token<Sys.Registry<S,C,R,E,Args,Error,Out,runner>>>) -> D.DispatchResult<S,C,R,E,H,D.Arguments<Unit,RA>,D.Error<CE,RE>,D.Output<Unit,RO>>:
10 match result:
11 case Run.Completed{token,fields,outcome}:D.Completed{put(Leaf.Record{token,fields}),convert(outcome)}
12 case Run.RegistrationRejected{token,fields,world,args}:D.RegistrationRejected{put(Leaf.Record{token,fields}),world,rejected(args)}
13def invoke(~S:Data,~C:Type,~R:Type,~E:Data,~H:Type,~Args:Type,~Error:Data,~Out:Type,~runner:W.World<S,C,R,E> -> Args -> Sys.Outcome<W.World<S,C,R,E>,Error,Out>,~RA:Type,~CE:Data,~RE:Data,~RO:Type,put:Leaf.Record<S,Stored.Token<Sys.Registry<S,C,R,E,Args,Error,Out,runner>>> -> H,convert:Sys.Outcome<W.World<S,C,R,E>,Error,Out> -> Sys.Outcome<W.World<S,C,R,E>,D.Error<CE,RE>,D.Output<Unit,RO>>,rejected:Args -> D.Arguments<Unit,RA>,record:Leaf.Record<S,Stored.Token<Sys.Registry<S,C,R,E,Args,Error,Out,runner>>>,world:W.World<S,C,R,E>,args:Args) -> D.DispatchResult<S,C,R,E,H,D.Arguments<Unit,RA>,D.Error<CE,RE>,D.Output<Unit,RO>>:
14 match record:
15 case Leaf.Record{token,fields}:returned(~S,~C,~R,~E,~H,~Args,~Error,~Out,~runner,~RA,~CE,~RE,~RO,put,convert,rejected,Run.run(~S,~C,~R,~E,~Args,~Error,~Out,~runner,token,fields,world,args))
16def current_cursor(~S:Data,fields:Stored.Fields<S>) -> Maybe<&2,Tick.Tick>:
17 match fields:
18 case Stored.Fields{_,_,_,_,cursor,_,_,_}:cursor
19def component(~S:Data,~C:Type,~R:Type,~E:Data,~H:Type,~CE:Data,~RA:Type,~RE:Data,~RO:Type,~runner:W.World<S,C,R,E> -> (Unit & Maybe<&2,Tick.Tick>) -> Sys.Outcome<W.World<S,C,R,E>,CE,List<&2,Unit>>,put:Leaf.Record<S,Stored.Token<Sys.Registry<S,C,R,E,Unit & Maybe<&2,Tick.Tick>,CE,List<&2,Unit>,runner>>> -> H,convert:Sys.Outcome<W.World<S,C,R,E>,CE,List<&2,Unit>> -> Sys.Outcome<W.World<S,C,R,E>,D.Error<CE,RE>,D.Output<Unit,RO>>,rejected:(Unit & Maybe<&2,Tick.Tick>) -> D.Arguments<Unit,RA>,record:Leaf.Record<S,Stored.Token<Sys.Registry<S,C,R,E,Unit & Maybe<&2,Tick.Tick>,CE,List<&2,Unit>,runner>>>,world:W.World<S,C,R,E>) -> D.DispatchResult<S,C,R,E,H,D.Arguments<Unit,RA>,D.Error<CE,RE>,D.Output<Unit,RO>>:
20 match record:
21 case Leaf.Record{token,+fields}:invoke(~S,~C,~R,~E,~H,~(Unit & Maybe<&2,Tick.Tick>),~CE,~List<&2,Unit>,~runner,~RA,~CE,~RE,~RO,put,convert,rejected,Leaf.Record{token,fields},world,(Unit{},current_cursor(~S,fields)))