ordinary_inspector_resource.bend
bendvy-ecs-core@0.1.0.1 · 28 lines · 0 definitions
1import Base
2import bendvy-ecs-core@0.1.0.1/resource_field_binding.bend as Binding
3import bendvy-ecs-core@0.1.0.1/resource_field.bend as Field
4import bendvy-ecs-core@0.1.0.1/owner_product.bend as Product
5import bendvy-ecs-core@0.1.0.1/ordinary_schema.bend as Schema
6import bendvy-ecs-core@0.1.0.1/ordinary_query_declaration.bend as Query
7import bendvy-ecs-core@0.1.0.1/inspector.bend as Inspector
8import bendvy-ecs-core@0.1.0.1/capabilities.bend as Cap
9
10# Identity and physical path come from the same ordinary generated binding.
11# The closed view remains trusted and must return its supplied affine owner.
12type Read<-S:Data,-P:Type,-identity:Schema.Resource<S,P>,-H:Type,-V:Data> is Type:
13 Read{operation:Cap.ValueRead<H,V>}
14type Declaration<-S:Data,-H:Type,-Ops:Type> is Type:
15 Declaration{grant:Ops,clauses:List<&2,Query.Clause<S>>}
16def read_field(~S:Data,~P:Type,~identity:Schema.Resource<S,P>,~H:Type,~V:Data,value:Read<S,P,identity,H,V>) -> H -> H & V:
17 match value:
18 case Read{operation}:Cap.value_read_field(~H,~V,operation)
19def get(~S:Data,~P:Type,~identity:Schema.Resource<S,P>,~H:Type,~V:Data,~value:Read<S,P,identity,H,V>,owner:H) -> H & V:
20 read_field(~S,~P,~identity,~H,~V,value)(owner)
21def bind(~S:Data,~C:Type,~R:Type,~E:Data,~P:Type,~Rest:Type,~V:Data,~lens:Product.Lens<R,P,Rest>,~identity:Schema.Resource<S,P>,~binding:Binding.Binding<S,R,P,Rest,lens,identity>,~view:P -> P & V) -> Declaration<S,Inspector.Frame<S,C,R,E>,Read<S,P,identity,Inspector.Frame<S,C,R,E>,V>>:
22 Declaration{Read{Inspector.read_resource(~S,~C,~R,~E,~V,~Field.project(~R,~P,~Rest,~V,~lens,~view))},[Query.Clause{Schema.resource_key(~S,~P,identity),Query.Read{}}]}
23def grant(~S:Data,~H:Type,~Ops:Type,value:Declaration<S,H,Ops>) -> Ops:
24 match value:
25 case Declaration{grant,_}:grant
26def clauses(~S:Data,~H:Type,~Ops:Type,value:Declaration<S,H,Ops>) -> List<&2,Query.Clause<S>>:
27 match value:
28 case Declaration{_,clauses}:clauses