1 import Base 2 import ./decode_data.bend as D 3 import ./capabilities.bend as Cap 4 import ./schema_fragments.bend as SF 5 # Generic admission provider. Only the trusted schema author closes decoder, 6 # owner lens and admitted/refused transition; gameplay is universal in H. 7 # No callback truthfulness or universal Raw->Output inverse is asserted. 8 def apply(-H:Type,-Raw:Type,-Observation:Data,cap:Cap.Request,raw:Raw,ctx:H) -> H & Observation: 9 match cap: 10 case Cap.Request{run}: run(ctx,raw) 11 def provide(~Raw:Type,~Owners:Type,~Observation:Data,~request:Owners -> Raw -> Owners & Observation,~body:@-H:Type -> Cap.Request -> Raw -> H -> H & Observation,ctx:Owners,raw:Raw) -> Owners & Observation: 12 body(Owners,Cap.Request{request},raw,ctx) 13 def decoded(~Raw:Type,~Owners:Type,~Observation:Data,~admit:Owners -> D.Receipt -> Owners & Observation,value:Owners & D.Receipt) -> Owners & Observation: 14 match value: 15 case (owners,receipt): admit(owners,receipt) 16 def request(~Raw:Type,~Owners:Type,~Observation:Data,~decode:Owners -> Raw -> Owners & D.Receipt,~admit:Owners -> D.Receipt -> Owners & Observation,owners:Owners,raw:Raw) -> Owners & Observation: 17 decoded(~Raw,~Owners,~Observation,~admit,decode(owners,raw)) 18 def constructed(~Raw:Type,~Owners:Type,~Observation:Data,~decode:Owners -> Raw -> Owners & D.Receipt,~admit:Owners -> D.Receipt -> Owners & Observation,~body:@-H:Type -> Cap.Request -> Raw -> H -> H & Observation,owners:Owners,raw:Raw) -> Owners & Observation: 19 provide(~Raw,~Owners,~Observation,~request(~Raw,~Owners,~Observation,~decode,~admit),~body,owners,raw) 20 # Complete availability is checked before registering or running any callback. 21 def provision_declared(~S:Data,~Owners:Type,~Output:Type,~launch:Owners -> Output,fragment:SF.Fragment,required:List<&2,SF.Entry>) -> SF.Bound: 22 SF.bind_declared(~S,~Owners,~Output,~launch,fragment,required)