ordinary_app_owned_event_publisher.bend
bendvy-ecs-core@0.1.0.1 · 41 lines · 0 definitions
1import Base
2import bendvy-ecs-core@0.1.0.1/schema_fragments.bend as Fragment
3import bendvy-ecs-core@0.1.0.1/ordinary_owned_event_declaration.bend as D
4import bendvy-ecs-core@0.1.0.1/ordinary_owned_event_family_publisher.bend as Publisher
5import bendvy-ecs-core@0.1.0.1/ordinary_app_composer.bend as Build
6import bendvy-ecs-core@0.1.0.1/ordinary_app_records.bend as Pair
7import bendvy-ecs-core@0.1.0.1/ordinary_app_registration_fields.bend as Fields
8import bendvy-ecs-core@0.1.0.1/ordinary_app_recipe.bend as Tree
9import bendvy-ecs-core@0.1.0.1/ordinary_app_observation_data.bend as DTO
10import bendvy-ecs-core@0.1.0.1/ordinary_query_declaration.bend as Query
11import bendvy-ecs-core@0.1.0.1/transaction.bend as T
12import bendvy-ecs-core@0.1.0.1/system.bend as Sys
13import bendvy-ecs-core@0.1.0.1/world.bend as W
14
15type Appended<Before:Type,After:Type> is Type:
16 Appended{app:After}
17 AppendRejected{app:Before}
18def uses(keys:List<&2,String>) -> List<&2,Fields.DeclaredUse>:
19 match keys:
20 case []:[]
21 case key <> rest:Fields.DeclaredUse{Fields.EventUse{},Fields.MessageSource{},key,Query.Write{}} <> uses(rest)
22def kind(description:D.Description) -> Fields.RegistrationKind:
23 match description:
24 case D.Description{keys,_}:Fields.MixedKind{uses(keys)}
25def registered(~S:Data,~C:Type,~R:Type,~E:Data,~Recovery:Type,~Ops:Type -> Type,~builder:D.Builder(~W.World<S,C,R,E>,~Recovery,~Ops),~declaration:D.Declaration<S,W.World<S,C,R,E>,Recovery,Ops,builder>,~Args:Type,~Error:Data,~Out:Type,~body:@-H:Type -> @-caps:Ops(H) -> Args -> H -> H & (T.Outcome<Error> & Out),~Previous:Type,~Rows:Data,~observe:W.World<S,C,R,E> -> W.World<S,C,R,E> & DTO.Observation<Rows>,~fold:Previous -> Previous & List<&2,Fields.Fields<S>>,previous:Previous,recipe:Tree.Recipe<W.World<S,C,R,E>,Rows,observe>,debug:Bool,result:Sys.RegistrationResult<S,C,R,E,Args,Unit,Publisher.Reply<Error,Out,Recovery>,Publisher.runner(~S,~C,~R,~E,~Recovery,~Ops,~builder,~declaration,~Args,~Error,~Out,~body)>) -> Appended<Build.Registered<S,W.World<S,C,R,E>,Previous,Rows,observe,fold>,Build.Registered<S,W.World<S,C,R,E>,Previous & Pair.Record<S,Fields.Token<Publisher.Registry(~S,~C,~R,~E,~Recovery,~Ops,~builder,~declaration,~Args,~Error,~Out,~body)>>,Rows,observe,Pair.fold_pair(~S,~Previous,~Pair.Record<S,Fields.Token<Publisher.Registry(~S,~C,~R,~E,~Recovery,~Ops,~builder,~declaration,~Args,~Error,~Out,~body)>>,~fold,~Pair.observed(~S,~Fields.Token<Publisher.Registry(~S,~C,~R,~E,~Recovery,~Ops,~builder,~declaration,~Args,~Error,~Out,~body)>) )>>:
26 match result:
27 case Sys.Registered{world,Sys.Registry{namespace,id,name,access,cursor}}:Appended{Build.Registered{world,(previous,Pair.Record{Fields.Token{},Fields.Fields{namespace,id,name,access,cursor,"",[],kind(D.description(~S,~W.World<S,C,R,E>,~Recovery,~Ops,~builder,declaration))}}),recipe,debug}}
28 case Sys.RegistrationFailed{world}:AppendRejected{Build.Registered{world,previous,recipe,debug}}
29def admitted(~S:Data,~C:Type,~R:Type,~E:Data,~Recovery:Type,~Ops:Type -> Type,~builder:D.Builder(~W.World<S,C,R,E>,~Recovery,~Ops),~declaration:D.Declaration<S,W.World<S,C,R,E>,Recovery,Ops,builder>,~Args:Type,~Error:Data,~Out:Type,~body:@-H:Type -> @-caps:Ops(H) -> Args -> H -> H & (T.Outcome<Error> & Out),~Previous:Type,~Rows:Data,~observe:W.World<S,C,R,E> -> W.World<S,C,R,E> & DTO.Observation<Rows>,~fold:Previous -> Previous & List<&2,Fields.Fields<S>>,complete:Bool,app:Build.Registered<S,W.World<S,C,R,E>,Previous,Rows,observe,fold>,name:String) -> Appended<Build.Registered<S,W.World<S,C,R,E>,Previous,Rows,observe,fold>,Build.Registered<S,W.World<S,C,R,E>,Previous & Pair.Record<S,Fields.Token<Publisher.Registry(~S,~C,~R,~E,~Recovery,~Ops,~builder,~declaration,~Args,~Error,~Out,~body)>>,Rows,observe,Pair.fold_pair(~S,~Previous,~Pair.Record<S,Fields.Token<Publisher.Registry(~S,~C,~R,~E,~Recovery,~Ops,~builder,~declaration,~Args,~Error,~Out,~body)>>,~fold,~Pair.observed(~S,~Fields.Token<Publisher.Registry(~S,~C,~R,~E,~Recovery,~Ops,~builder,~declaration,~Args,~Error,~Out,~body)>) )>>:
30 match complete app:
31 case False{} app:AppendRejected{app}
32 case True{} Build.Registered{world,previous,recipe,debug}:registered(~S,~C,~R,~E,~Recovery,~Ops,~builder,~declaration,~Args,~Error,~Out,~body,~Previous,~Rows,~observe,~fold,previous,recipe,debug,Publisher.define(~S,~C,~R,~E,~Recovery,~Ops,~builder,~declaration,~Args,~Error,~Out,~body,world,name))
33def register(~S:Data,~C:Type,~R:Type,~E:Data,~Recovery:Type,~Ops:Type -> Type,~builder:D.Builder(~W.World<S,C,R,E>,~Recovery,~Ops),~declaration:D.Declaration<S,W.World<S,C,R,E>,Recovery,Ops,builder>,~Args:Type,~Error:Data,~Out:Type,~body:@-H:Type -> @-caps:Ops(H) -> Args -> H -> H & (T.Outcome<Error> & Out),~Previous:Type,~Rows:Data,~observe:W.World<S,C,R,E> -> W.World<S,C,R,E> & DTO.Observation<Rows>,~fold:Previous -> Previous & List<&2,Fields.Fields<S>>,app:Build.Registered<S,W.World<S,C,R,E>,Previous,Rows,observe,fold>,name:String) -> Appended<Build.Registered<S,W.World<S,C,R,E>,Previous,Rows,observe,fold>,Build.Registered<S,W.World<S,C,R,E>,Previous & Pair.Record<S,Fields.Token<Publisher.Registry(~S,~C,~R,~E,~Recovery,~Ops,~builder,~declaration,~Args,~Error,~Out,~body)>>,Rows,observe,Pair.fold_pair(~S,~Previous,~Pair.Record<S,Fields.Token<Publisher.Registry(~S,~C,~R,~E,~Recovery,~Ops,~builder,~declaration,~Args,~Error,~Out,~body)>>,~fold,~Pair.observed(~S,~Fields.Token<Publisher.Registry(~S,~C,~R,~E,~Recovery,~Ops,~builder,~declaration,~Args,~Error,~Out,~body)>) )>>:
34 admitted(~S,~C,~R,~E,~Recovery,~Ops,~builder,~declaration,~Args,~Error,~Out,~body,~Previous,~Rows,~observe,~fold,D.complete(D.description(~S,~W.World<S,C,R,E>,~Recovery,~Ops,~builder,declaration)),app,name)
35def event_entries(~S:Data,keys:List<&2,String>) -> List<&2,Fragment.Entry<S>>:
36 match keys:
37 case []:[]
38 case +key <> rest:Fragment.Entry{Fragment.Event{},key,key} <> event_entries(~S,rest)
39def entries(~S:Data,description:D.Description) -> List<&2,Fragment.Entry<S>>:
40 match description:
41 case D.Description{keys,_}:event_entries(~S,keys)