ordinary_app_observation.bend
bendvy-ecs-core@0.1.0.1 · 22 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/compose.bend as Q
4import bendvy-ecs-core@0.1.0.1/inspector.bend as I
5import bendvy-ecs-core@0.1.0.1/inspector_query.bend as IQ
6import bendvy-ecs-core@0.1.0.1/ordinary_query_observable.bend as O
7import bendvy-ecs-core@0.1.0.1/ordinary_app_observation_data.bend as DTO
8import bendvy-ecs-core@0.1.0.1/ordinary_app_resource_declaration.bend as D
9import bendvy-ecs-core@0.1.0.1/ordinary_resource_system.bend as P
10import bendvy-ecs-core@0.1.0.1/transaction.bend as T
11def component_observe(~S:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~V:Data,~query:O.Declaration<S,Q.Frame<S,C,R,E>,Ops(Q.Frame<S,C,R,E>),I.Frame<S,C,R,E>,V>,~render:V -> String,world:W.World<S,C,R,E>) -> W.World<S,C,R,E> & DTO.Observation<DTO.Product<Unit,List<&2,IQ.ProjectedRow<S,V>>>>:
12 DTO.append_previous(~S,~C,~R,~E,~Unit,~Ops,~V,~query,~render,(world,DTO.Observation{Unit{},[]}))
13def resource_observed(~S:Data,~C:Type,~R:Type,~E:Data,~V:Data,name:String,render:V -> String,result:W.World<S,C,R,E> & V) -> W.World<S,C,R,E> & DTO.Observation<V>:
14 match result:
15 case (world,+value):(world,DTO.Observation{value,[name ++ "=" ++ render(value)]})
16def resource_returned(~S:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~V:Data,~declaration:D.Declaration<S,C,R,E,Ops,V>,result:W.World<S,C,R,E> & V) -> W.World<S,C,R,E> & DTO.Observation<V>:
17 resource_observed(~S,~C,~R,~E,~V,D.name(~S,~C,~R,~E,~Ops,~V,declaration),D.presenter(~S,~C,~R,~E,~Ops,~V,declaration),result)
18def resource_declared(~S:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~V:Data,declaration:D.Declaration<S,C,R,E,Ops,V>,world:W.World<S,C,R,E>) -> W.World<S,C,R,E> & DTO.Observation<V>:
19 match declaration:
20 case D.Declaration{ordinary,observe,render}:resource_observed(~S,~C,~R,~E,~V,D.named(~S,P.clause(~S,~R,~T.Tx<W.World<S,C,R,E>,E>,~Ops(T.Tx<W.World<S,C,R,E>,E>),ordinary)),render,observe(world))
21def resource_observe(~S:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~V:Data,~declaration:D.Declaration<S,C,R,E,Ops,V>,world:W.World<S,C,R,E>) -> W.World<S,C,R,E> & DTO.Observation<V>:
22 resource_declared(~S,~C,~R,~E,~Ops,~V,declaration,world)