inspector_event_value.bend
bendvy-ecs-core@0.1.0.1 · 30 lines · 0 definitions
1import Base
2import bendvy-ecs-core@0.1.0.1/world.bend as W
3import bendvy-ecs-core@0.1.0.1/event_runtime.bend as Ev
4import bendvy-ecs-core@0.1.0.1/event_stream.bend as Leaf
5import bendvy-ecs-core@0.1.0.1/event_family_routing.bend as Route
6import bendvy-ecs-core@0.1.0.1/ordinary_event_declaration.bend as Event
7import bendvy-ecs-core@0.1.0.1/capabilities.bend as Cap
8
9# Read-only retained leaf values. No operational reader action or World adapter.
10def selected(~S:Data,~E:Data,allowed:Bool,+stream:Leaf.Stream<S,E>) -> Leaf.Stream<S,E> & Maybe<&2,List<&2,E>>:
11 match allowed stream:
12 case False{} stream:(stream,None{})
13 case True{} Leaf.Stream{domain,+batches,positions,nextReader,frameStart,boundary,capacity,dropped}:(Leaf.Stream{domain,batches,positions,nextReader,frameStart,boundary,capacity,dropped},Some{Ev.values(~E,batches)})
14def declared(~S:Data,~E:Data,declaration:Event.Declaration<S,E>,+stream:Leaf.Stream<S,E>) -> Leaf.Stream<S,E> & Maybe<&2,List<&2,E>>:
15 match declaration stream:
16 case Event.Declaration{_,Event.Write{}} stream:(stream,None{})
17 case Event.Declaration{Event.Domain{expected},Event.Read{}} Leaf.Stream{Event.Domain{+actual},+batches,+positions,+nextReader,+frameStart,+boundary,+capacity,+dropped}:selected(~S,~E,String.eq(expected,actual),Leaf.Stream{Event.Domain{actual},batches,positions,nextReader,frameStart,boundary,capacity,dropped})
18def restored(~S:Data,~C:Type,~R:Type,~P:Data,~E:Data,~F:Type,~take:F -> F & Leaf.Stream<S,E>,~put:F -> Leaf.Stream<S,E> -> F,world:W.World<S,C,R,P>,tick:Nat,family:F,returned:Leaf.Stream<S,E> & Maybe<&2,List<&2,E>>) -> Route.Runtime<S,C,R,P,F> & Maybe<&2,List<&2,E>>:
19 match returned:
20 case (stream,values):(Route.Runtime{world,put(family,stream),tick},values)
21def taken(~S:Data,~C:Type,~R:Type,~P:Data,~E:Data,~F:Type,~take:F -> F & Leaf.Stream<S,E>,~put:F -> Leaf.Stream<S,E> -> F,declaration:Event.Declaration<S,E>,world:W.World<S,C,R,P>,tick:Nat,returned:F & Leaf.Stream<S,E>) -> Route.Runtime<S,C,R,P,F> & Maybe<&2,List<&2,E>>:
22 match returned:
23 case (family,stream):restored(~S,~C,~R,~P,~E,~F,~take,~put,world,tick,family,declared(~S,~E,declaration,stream))
24def get(~S:Data,~C:Type,~R:Type,~P:Data,~E:Data,~F:Type,~take:F -> F & Leaf.Stream<S,E>,~put:F -> Leaf.Stream<S,E> -> F,declaration:Event.Declaration<S,E>,owner:Route.Runtime<S,C,R,P,F>) -> Route.Runtime<S,C,R,P,F> & Maybe<&2,List<&2,E>>:
25 match owner:
26 case Route.Runtime{world,family,tick}:taken(~S,~C,~R,~P,~E,~F,~take,~put,declaration,world,tick,take(family))
27def read(~S:Data,~C:Type,~R:Type,~P:Data,~E:Data,~F:Type,~take:F -> F & Leaf.Stream<S,E>,~put:F -> Leaf.Stream<S,E> -> F,declaration:Event.Declaration<S,E>) -> Cap.ValueRead<Route.Runtime<S,C,R,P,F>,Maybe<&2,List<&2,E>>>:
28 Cap.ValueRead{owner => get(~S,~C,~R,~P,~E,~F,~take,~put,declaration,owner)}
29def values(~S:Data,~C:Type,~R:Type,~P:Data,~E:Data,~F:Type,~take:F -> F & Leaf.Stream<S,E>,~put:F -> Leaf.Stream<S,E> -> F,declaration:Event.Declaration<S,E>,owner:Route.Runtime<S,C,R,P,F>) -> Route.Runtime<S,C,R,P,F> & Maybe<&2,List<&2,E>>:
30 Cap.value_read_field(~Route.Runtime<S,C,R,P,F>,~Maybe<&2,List<&2,E>>,read(~S,~C,~R,~P,~E,~F,~take,~put,declaration))(owner)