ordinary_app_event.bend

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

1import Base
2import bendvy-ecs-core@0.1.0.0/world.bend as W
3import bendvy-ecs-core@0.1.0.0/system.bend as Sys
4import bendvy-ecs-core@0.1.0.0/event_runtime.bend as Ev
5import bendvy-ecs-core@0.1.0.0/ordinary_event_declaration.bend as Event
6import bendvy-ecs-core@0.1.0.0/ordinary_app_access.bend as Access
7import bendvy-ecs-core@0.1.0.0/ordinary_query_declaration.bend as Query
8# Sole retained operational Registry; debug never reads an event payload or Reader.
9type Owner<S:Data,E:Data,Registry:Type> is Type:
10  Owner{declaration:Event.Declaration<S,E>,registry:Registry,debug:Bool}
11def query_mode(mode:Event.Mode) -> Query.Mode:
12  match mode:
13    case Event.Read{}:Query.Read{}
14    case Event.Write{}:Query.Write{}
15def enabled(~S:Data,~E:Data,~Registry:Type,owner:Owner<S,E,Registry>,flag:Bool) -> Owner<S,E,Registry>:
16  match owner:
17    case Owner{declaration,registry,_}:Owner{declaration,registry,flag}
18def bind(~S:Data,~E:Data,~Registry:Type,declaration:Event.Declaration<S,E>,registry:Registry) -> Owner<S,E,Registry>:Owner{declaration,registry,False{}}
19def described(~S:Data,~C:Type,~R:Type,~E:Data,~A:Type,~Error:Data,~O:Type,~runner:W.World<S,C,R,E> -> A -> Sys.Outcome<W.World<S,C,R,E>,Error,O>,declaration:Event.Declaration<S,E>,registry:Sys.Registry<S,C,R,E,A,Error,O,runner>,debug:Bool) -> Owner<S,E,Sys.Registry<S,C,R,E,A,Error,O,runner>> & Maybe<&2,Access.Entry>:
20  match declaration registry:
21    case Event.Declaration{Event.Domain{+key},+mode} Sys.Registry{+namespace,+id,+name,+access,+cursor}:(Owner{Event.Declaration{Event.Domain{key},mode},Sys.Registry{namespace,id,name,access,cursor},debug},Some{Access.Entry{Access.Events{},key,[Access.Use{namespace,id,name,query_mode(mode),Access.role(query_mode(mode))}]}})
22def snapshot(~S:Data,~C:Type,~R:Type,~E:Data,~A:Type,~Error:Data,~O:Type,~runner:W.World<S,C,R,E> -> A -> Sys.Outcome<W.World<S,C,R,E>,Error,O>,owner:Owner<S,E,Sys.Registry<S,C,R,E,A,Error,O,runner>>) -> Owner<S,E,Sys.Registry<S,C,R,E,A,Error,O,runner>> & Maybe<&2,Access.Entry>:
23  match owner:
24    case Owner{declaration,registry,False{}}:(Owner{declaration,registry,False{}},None{})
25    case Owner{declaration,registry,True{}}:described(~S,~C,~R,~E,~A,~Error,~O,~runner,declaration,registry,True{})
26
27type WriterResult<S:Data,C:Type,R:Type,E:Data,A:Type,Error:Data,O:Type,-runner:W.World<S,C,R,E> -> A -> Sys.Outcome<W.World<S,C,R,E>,Error,O>> is Type:
28  Completed{owner:Owner<S,E,Sys.Registry<S,C,R,E,A,Error,O,runner>>,outcome:Sys.Outcome<W.World<S,C,R,E>,Error,O>}
29  Rejected{owner:Owner<S,E,Sys.Registry<S,C,R,E,A,Error,O,runner>>,world:W.World<S,C,R,E>,args:A}
30def writer_returned(~S:Data,~C:Type,~R:Type,~E:Data,~A:Type,~Error:Data,~O:Type,~runner:W.World<S,C,R,E> -> A -> Sys.Outcome<W.World<S,C,R,E>,Error,O>,declaration:Event.Declaration<S,E>,debug:Bool,result:Sys.RunResult<S,C,R,E,A,Error,O,runner>) -> WriterResult<S,C,R,E,A,Error,O,runner>:
31  match result:
32    case Sys.Completed{registry,outcome}:Completed{Owner{declaration,registry,debug},outcome}
33    case Sys.RegistrationRejected{registry,world,args}:Rejected{Owner{declaration,registry,debug},world,args}
34def run_writer(~S:Data,~C:Type,~R:Type,~E:Data,~A:Type,~Error:Data,~O:Type,~runner:W.World<S,C,R,E> -> A -> Sys.Outcome<W.World<S,C,R,E>,Error,O>,owner:Owner<S,E,Sys.Registry<S,C,R,E,A,Error,O,runner>>,world:W.World<S,C,R,E>,args:A) -> WriterResult<S,C,R,E,A,Error,O,runner>:
35  match owner:
36    case Owner{declaration,registry,debug}:writer_returned(~S,~C,~R,~E,~A,~Error,~O,~runner,declaration,debug,Sys.run(~S,~C,~R,~E,~A,~Error,~O,~runner,registry,world,args))
37
38type ReaderResult<S:Data,C:Type,R:Type,E:Data,A:Type,Error:Data,O:Type,-runner:W.World<S,C,R,E> -> Ev.Input<E,A> -> Sys.Outcome<W.World<S,C,R,E>,Error,O>> is Type:
39  Ran{runtime:Ev.Runtime<S,C,R,E>,reader:Ev.Reader<S>,owner:Owner<S,E,Sys.Registry<S,C,R,E,Ev.Input<E,A>,Error,O,runner>>,completion:Ev.Completion<Error,O,A>}
40def reader_returned(~S:Data,~C:Type,~R:Type,~E:Data,~A:Type,~Error:Data,~O:Type,~runner:W.World<S,C,R,E> -> Ev.Input<E,A> -> Sys.Outcome<W.World<S,C,R,E>,Error,O>,declaration:Event.Declaration<S,E>,debug:Bool,result:Ev.RunResult<S,C,R,E,A,Error,O,runner>) -> ReaderResult<S,C,R,E,A,Error,O,runner>:
41  match result:
42    case Ev.Ran{runtime,reader,registry,completion}:Ran{runtime,reader,Owner{declaration,registry,debug},completion}
43def run_reader(~S:Data,~C:Type,~R:Type,~E:Data,~A:Type,~Error:Data,~O:Type,~runner:W.World<S,C,R,E> -> Ev.Input<E,A> -> Sys.Outcome<W.World<S,C,R,E>,Error,O>,owner:Owner<S,E,Sys.Registry<S,C,R,E,Ev.Input<E,A>,Error,O,runner>>,runtime:Ev.Runtime<S,C,R,E>,reader:Ev.Reader<S>,args:A) -> ReaderResult<S,C,R,E,A,Error,O,runner>:
44  match owner:
45    case Owner{declaration,registry,debug}:reader_returned(~S,~C,~R,~E,~A,~Error,~O,~runner,declaration,debug,Ev.run(~S,~C,~R,~E,~A,~Error,~O,~runner,runtime,reader,registry,args))
46
47type WriterRegistered<S:Data,C:Type,R:Type,E:Data,A:Type,Error:Data,O:Type,-runner:W.World<S,C,R,E> -> A -> Sys.Outcome<W.World<S,C,R,E>,Error,O>> is Type:
48  WriterRegistered{world:W.World<S,C,R,E>,owner:Owner<S,E,Sys.Registry<S,C,R,E,A,Error,O,runner>>}
49  WriterFailed{world:W.World<S,C,R,E>}
50def writer_registered(~S:Data,~C:Type,~R:Type,~E:Data,~A:Type,~Error:Data,~O:Type,~runner:W.World<S,C,R,E> -> A -> Sys.Outcome<W.World<S,C,R,E>,Error,O>,declaration:Event.Declaration<S,E>,result:Sys.RegistrationResult<S,C,R,E,A,Error,O,runner>) -> WriterRegistered<S,C,R,E,A,Error,O,runner>:
51  match result:
52    case Sys.RegistrationFailed{world}:WriterFailed{world}
53    case Sys.Registered{world,registry}:WriterRegistered{world,Owner{declaration,registry,False{}}}
54def register_writer(~S:Data,~C:Type,~R:Type,~E:Data,~A:Type,~Error:Data,~O:Type,~runner:W.World<S,C,R,E> -> A -> Sys.Outcome<W.World<S,C,R,E>,Error,O>,world:W.World<S,C,R,E>,+declaration:Event.Declaration<S,E>,name:String) -> WriterRegistered<S,C,R,E,A,Error,O,runner>:
55  writer_registered(~S,~C,~R,~E,~A,~Error,~O,~runner,declaration,Event.register_writer(~S,~C,~R,~E,~A,~Error,~O,~runner,world,declaration,name))
56
57type ReaderRegistered<S:Data,C:Type,R:Type,E:Data,A:Type,Error:Data,O:Type,-runner:W.World<S,C,R,E> -> Ev.Input<E,A> -> Sys.Outcome<W.World<S,C,R,E>,Error,O>> is Type:
58  ReaderRegistered{runtime:Ev.Runtime<S,C,R,E>,reader:Ev.Reader<S>,owner:Owner<S,E,Sys.Registry<S,C,R,E,Ev.Input<E,A>,Error,O,runner>>}
59  ReaderFailed{runtime:Ev.Runtime<S,C,R,E>}
60def reader_registered(~S:Data,~C:Type,~R:Type,~E:Data,~A:Type,~Error:Data,~O:Type,~runner:W.World<S,C,R,E> -> Ev.Input<E,A> -> Sys.Outcome<W.World<S,C,R,E>,Error,O>,declaration:Event.Declaration<S,E>,result:Ev.Registered<S,C,R,E,A,Error,O,runner>) -> ReaderRegistered<S,C,R,E,A,Error,O,runner>:
61  match result:
62    case Ev.RegisterFailed{runtime}:ReaderFailed{runtime}
63    case Ev.Registered{runtime,reader,registry}:ReaderRegistered{runtime,reader,Owner{declaration,registry,False{}}}
64def register_reader(~S:Data,~C:Type,~R:Type,~E:Data,~A:Type,~Error:Data,~O:Type,~runner:W.World<S,C,R,E> -> Ev.Input<E,A> -> Sys.Outcome<W.World<S,C,R,E>,Error,O>,runtime:Ev.Runtime<S,C,R,E>,+declaration:Event.Declaration<S,E>,name:String) -> ReaderRegistered<S,C,R,E,A,Error,O,runner>:
65  reader_registered(~S,~C,~R,~E,~A,~Error,~O,~runner,declaration,Event.register_reader(~S,~C,~R,~E,~A,~Error,~O,~runner,runtime,declaration,name))