restore_events.bend
bendvy-ecs-core@0.1.0.1 · 28 lines · 0 definitions
1import Base
2import bendvy-ecs-core@0.1.0.1/ordinary_owned_event_family_reader_binding.bend as Setup
3import bendvy-ecs-core@0.1.0.1/ordinary_owned_event_binding.bend as Binding
4import bendvy-ecs-core@0.1.0.1/ordinary_owned_event.bend as Pub
5import bendvy-ecs-core@0.1.0.1/owned_event_log.bend as Log
6import bendvy-ecs-core@0.1.0.1/owned_event_key_route.bend as KeyRoute
7import bendvy-ecs-core@0.1.0.1/ordinary_event_family.bend as Family
8import bendvy-ecs-core@0.1.0.1/owner_product.bend as Product
9import bendvy-ecs-core@0.1.0.1/event_publication.bend as Publication
10import bendvy-ecs-core@0.1.0.1/ordinary_event_declaration.bend as Declaration
11import bendvy-ecs-core@0.1.0.1/owned_event_family_catalog.bend as Catalog
12import bendvy-ecs-core@0.1.0.1/event_stream.bend as Stream
13
14# A Data event family has no affine log owner to drain. Its ordinary domain
15# supplies the same nominal stream used by setup/readers and catalog composition.
16def data_retain(~E:Data,unit:Unit,records:List<&2,E>) -> Unit & Unit:
17 (unit,Unit{})
18def data_drain(unit:Unit) -> Unit & Unit:
19 (unit,Unit{})
20def data_clear(~S:Data,~E:Data,stream:Stream.Stream<S,E>) -> Stream.Stream<S,E>:
21 match stream:
22 case Stream.Stream{domain,_,positions,nextReader,frameStart,boundary,capacity,dropped}:Stream.Stream{domain,[],positions,nextReader,frameStart,boundary,capacity,dropped}
23def data_catalog(~S:Data,~E:Data,domain:Declaration.Domain<S,E>) -> Catalog.Catalog<E,Unit,Stream.Stream<S,E>,Unit,data_retain(~E),data_drain,data_clear(~S,~E)>:
24 Catalog.Catalog{}
25def MixedSetup(~S:Data,~P:Type,~E:Data,~identity:Pub.Domain<S,P>) -> Data:
26 Setup.Setup<S,Product.Owner<Log.Log<P>,Unit>,P,Unit & Unit,Publication.Publication<Nat,E>,Family.Domains<Declaration.Domain<S,Nat>,Declaration.Domain<S,E>>,Product.Owner<Stream.Stream<S,Nat>,Stream.Stream<S,E>>,Binding.left_path(~Log.Log<P>,~Unit,~P,~Unit,~Binding.identity_lens(~Log.Log<P>)),KeyRoute.inject_left(~Nat,~E,~KeyRoute.inject_leaf),KeyRoute.select_left(~Nat,~E,~KeyRoute.select_leaf),identity,Family.node_make(~Declaration.Domain<S,Nat>,~Declaration.Domain<S,E>,~Stream.Stream<S,Nat>,~Stream.Stream<S,E>,~Family.leaf_make(~S,~Nat),~Family.leaf_make(~S,~E)),Family.node_sync(~Nat,~E,~Stream.Stream<S,Nat>,~Stream.Stream<S,E>,~Family.leaf_sync(~S,~Nat),~Family.leaf_sync(~S,~E)),Family.node_frame(~Stream.Stream<S,Nat>,~Stream.Stream<S,E>,~Family.leaf_frame(~S,~Nat),~Family.leaf_frame(~S,~E)),Family.pair_retain(~Nat,~E,~Stream.Stream<S,Nat>,~Stream.Stream<S,E>,~Family.leaf_retain(~S,~Nat),~Family.leaf_retain(~S,~E)),Family.pair_inventory(~Stream.Stream<S,Nat>,~Stream.Stream<S,E>,~Family.leaf_inventory(~S,~Nat),~Family.leaf_inventory(~S,~E)),Family.left_take(~S,~Nat,~Stream.Stream<S,Nat>,~Stream.Stream<S,E>,~Family.selected_leaf(~S,~Nat)),Family.left_put(~S,~Nat,~Stream.Stream<S,Nat>,~Stream.Stream<S,E>,~Family.replaced_leaf(~S,~Nat))>
27def with_data(~S:Data,~P:Type,~E:Data,~identity:Pub.Domain<S,P>,domain:Declaration.Domain<S,E>) -> MixedSetup(~S,~P,~E,~identity):
28 Setup.Setup{Binding.left(~S,~Log.Log<P>,~Unit,~P,~Unit,~Nat,~E,~Binding.identity_lens(~Log.Log<P>),~KeyRoute.inject_leaf,~KeyRoute.select_leaf,~identity,Binding.leaf(~S,~P,~identity)),Family.branch(~S,~Nat,~E,~Declaration.Domain<S,Nat>,~Declaration.Domain<S,E>,~Stream.Stream<S,Nat>,~Stream.Stream<S,E>,~Family.leaf_make(~S,~Nat),~Family.leaf_make(~S,~E),~Family.leaf_sync(~S,~Nat),~Family.leaf_sync(~S,~E),~Family.leaf_frame(~S,~Nat),~Family.leaf_frame(~S,~E),~Family.leaf_retain(~S,~Nat),~Family.leaf_retain(~S,~E),~Family.leaf_inventory(~S,~Nat),~Family.leaf_inventory(~S,~E),Family.leaf(~S,~Nat,Setup.domain(~S,~P,identity)),Family.leaf(~S,~E,domain)),Family.select_left(~S,~Nat,~Stream.Stream<S,Nat>,~Stream.Stream<S,E>,~Family.selected_leaf(~S,~Nat),~Family.replaced_leaf(~S,~Nat),Family.select_leaf(~S,~Nat))}