ordinary_app_resource_declaration.bend
bendvy-ecs-core@0.1.0.4 · 65 lines · 10 definitions
1import Base
2import bendvy-ecs-core@0.1.0.4/ordinary_resource_system.bend as P
3import bendvy-ecs-core@0.1.0.4/ordinary_schema.bend as Schema
4import bendvy-ecs-core@0.1.0.4/world.bend as W
5import bendvy-ecs-core@0.1.0.4/transaction.bend as T
6import bendvy-ecs-core@0.1.0.4/capabilities.bend as Cap
7import bendvy-ecs-core@0.1.0.4/ordinary_query_declaration.bend as Query
8
9
10
11
12
13
14
15
16type Declaration<-S:Data,-C:Type,-R:Type,-E:Data,-Ops:Type -> Type,-V:Data> is Type:
17 Declaration{ordinary:P.Declaration<S,R,T.Tx<W.World<S,C,R,E>,E>,Ops(T.Tx<W.World<S,C,R,E>,E>)>,observe:W.World<S,C,R,E> -> W.World<S,C,R,E> & V,render:V -> String}
18
19
20def read_ops(~V:Data,H:Type) -> Type:
21 Cap.ValueRead<H,V>
22
23
24
25def write_ops(~R:Type,~V:Data,H:Type) -> Type:
26 Cap.ValueWrite<H,R,V>
27
28
29
30
31
32def read(~S:Data,~C:Type,~R:Type,~E:Data,~V:Data,~project:R -> R & V,~render:V -> String,identity:Schema.Resource<S,R>) -> Declaration<S,C,R,E,read_ops(~V),V>:
33 Declaration{P.read(~S,~C,~R,~E,~V,~project,identity),W.observe_resource(~S,~C,~R,~E,~V,~project),render}
34
35
36
37
38
39def write(~S:Data,~C:Type,~R:Type,~E:Data,~V:Data,~project:R -> R & V,~render:V -> String,identity:Schema.Resource<S,R>) -> Declaration<S,C,R,E,write_ops(~R,~V),V>:
40 Declaration{P.write(~S,~C,~R,~E,~V,~project,identity),W.observe_resource(~S,~C,~R,~E,~V,~project),render}
41
42
43
44def ordinary(~S:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~V:Data,declaration:Declaration<S,C,R,E,Ops,V>) -> P.Declaration<S,R,T.Tx<W.World<S,C,R,E>,E>,Ops(T.Tx<W.World<S,C,R,E>,E>)>:
45 match declaration:
46 case Declaration{ordinary,_,_}:ordinary
47
48
49
50def observer(~S:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~V:Data,declaration:Declaration<S,C,R,E,Ops,V>) -> W.World<S,C,R,E> -> W.World<S,C,R,E> & V:
51 match declaration:
52 case Declaration{_,observe,_}:observe
53
54
55def presenter(~S:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~V:Data,declaration:Declaration<S,C,R,E,Ops,V>) -> V -> String:
56 match declaration:
57 case Declaration{_,_,render}:render
58def named(~S:Data,value:Query.Clause<S>) -> String:
59 match value:
60 case Query.Clause{key,_}:key
61
62
63
64def name(~S:Data,~C:Type,~R:Type,~E:Data,~Ops:Type -> Type,~V:Data,declaration:Declaration<S,C,R,E,Ops,V>) -> String:
65 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(~S,~C,~R,~E,~Ops,~V,declaration)))