1 import Base 2 import inspector_metadata.bend as Meta 3 import inspector.bend as I 4 import capabilities.bend as Cap 5 6 # Trusted schema authoring only, like component.Family's indexed closed lens. 7 # The index binds which projection constructs this grant; it does not prove an 8 # arbitrary caller's numeric token/name/lens assertion is canonical or truthful. 9 type Declaration<-S:Data,-R:Type,-V:Data,-Token:Data,-project:R -> R & V> is Data: 10 Declaration{id:U32,name:String} 11 type BoundRead<-S:Data,-H:Type,-V:Data> is Type: 12 BoundRead{metadata:Meta.Resource,read:Cap.ValueRead} 13 14 def canonical(~S:Data,~R:Type,~V:Data,~Token:Data,~project:R -> R & V,id:U32,name:String) -> Declaration: 15 Declaration{id,name} 16 def bind(~S:Data,~Store:Type,~R:Type,~E:Data,~V:Data,~Token:Data,~project:R -> R & V,declaration:Declaration) -> BoundRead,V>: 17 match declaration: 18 case Declaration{id,name}:BoundRead{Meta.Resource{id,name},I.read_resource(~S,~Store,~R,~E,~V,~project)} 19 def split(~S:Data,~H:Type,~V:Data,bound:BoundRead) -> Meta.Resource & Cap.ValueRead: 20 match bound: 21 case BoundRead{metadata,read}:(metadata,read)