ordinary_optional_resource_system.bend

bendvy-ecs-core@0.1.0.1 · 21 lines · 0 definitions

1import Base
2import bendvy-ecs-core@0.1.0.1/ordinary_optional_resource_declaration.bend as D
3import bendvy-ecs-core@0.1.0.1/ordinary_resource_field_system.bend as Field
4import bendvy-ecs-core@0.1.0.1/world.bend as W
5import bendvy-ecs-core@0.1.0.1/transaction.bend as T
6import bendvy-ecs-core@0.1.0.1/check.bend as K
7import bendvy-ecs-core@0.1.0.1/system.bend as Sys
8import bendvy-ecs-core@0.1.0.1/ordinary_query_declaration.bend as Q
9# Existing transaction body is reached only after the declared slot preflight.
10def preflighted(~S:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~Args: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<K.Error> & Out),args:Args,result:W.World<S,C,R,E> & List<&2,String>) -> Sys.Outcome<W.World<S,C,R,E>,K.Error,Out>:
11  match result:
12    case (world,[]):Field.runner(~S,~C,~R,~E,~Ops,~Args,~K.Error,~Out,~D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration),~body,world,args)
13    case (world,missing):Sys.Failed{world,K.MissingRuntimeRequirements{missing}}
14def runner(~S:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~Args: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<K.Error> & Out),world:W.World<S,C,R,E>,args:Args) -> Sys.Outcome<W.World<S,C,R,E>,K.Error,Out>:
15  preflighted(~S,~C,~R,~E,~Ops,~Args,~Out,~Value,~declaration,~body,args,D.preflight(~S,~C,~R,~E,~Ops,~Value,declaration,world))
16def registered(~S:Data,~C:Type,~R:Type,~E:Data,~Args:Data,~Out:Type,~run:W.World<S,C,R,E> -> Args -> Sys.Outcome<W.World<S,C,R,E>,K.Error,Out>,~clauses:List<&2,Q.Clause<S>>,result:Sys.RegistrationResult<S,C,R,E,Args,K.Error,Out,run>) -> Field.Defined<S,W.World<S,C,R,E>,Sys.Registry<S,C,R,E,Args,K.Error,Out,run>,clauses>:
17  match result:
18    case Sys.RegistrationFailed{world}:Field.Rejected{world}
19    case Sys.Registered{world,registry}:Field.Defined{world,Field.Owner{registry}}
20def define(~S:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~Args: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<K.Error> & Out),world:W.World<S,C,R,E>,name:String) -> Field.Defined<S,W.World<S,C,R,E>,Sys.Registry<S,C,R,E,Args,K.Error,Out,runner(~S,~C,~R,~E,~Ops,~Args,~Out,~Value,~declaration,~body)>,Field.clauses(~S,~T.Tx<W.World<S,C,R,E>,E>,~Ops(T.Tx<W.World<S,C,R,E>,E>),D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration))>:
21  registered(~S,~C,~R,~E,~Args,~Out,~runner(~S,~C,~R,~E,~Ops,~Args,~Out,~Value,~declaration,~body),~Field.clauses(~S,~T.Tx<W.World<S,C,R,E>,E>,~Ops(T.Tx<W.World<S,C,R,E>,E>),D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration)),Sys.register(~S,~C,~R,~E,~Args,~K.Error,~Out,~runner(~S,~C,~R,~E,~Ops,~Args,~Out,~Value,~declaration,~body),world,name,Field.access(~S,Field.clauses(~S,~T.Tx<W.World<S,C,R,E>,E>,~Ops(T.Tx<W.World<S,C,R,E>,E>),D.ordinary(~S,~C,~R,~E,~Ops,~Value,declaration)))))