decode_capabilities.bend
bendvy-ecs-core@0.1.0.3 · 22 lines · 6 definitions
1import Base
2import bendvy-ecs-core@0.1.0.3/decode_data.bend as D
3import bendvy-ecs-core@0.1.0.3/capabilities.bend as Cap
4import bendvy-ecs-core@0.1.0.3/schema_fragments.bend as SF
5
6
7
8def apply(-H:Type,-Raw:Type,-Observation:Data,cap:Cap.Request<H,Raw,Observation>,raw:Raw,ctx:H) -> H & Observation:
9 match cap:
10 case Cap.Request{run}: run(ctx,raw)
11def provide(~Raw:Type,~Owners:Type,~Observation:Data,~request:Owners -> Raw -> Owners & Observation,~body:@-H:Type -> Cap.Request<H,Raw,Observation> -> Raw -> H -> H & Observation,ctx:Owners,raw:Raw) -> Owners & Observation:
12 body(Owners,Cap.Request{request},raw,ctx)
13def decoded(~Raw:Type,~Owners:Type,~Observation:Data,~admit:Owners -> D.Receipt<Raw> -> Owners & Observation,value:Owners & D.Receipt<Raw>) -> Owners & Observation:
14 match value:
15 case (owners,receipt): admit(owners,receipt)
16def request(~Raw:Type,~Owners:Type,~Observation:Data,~decode:Owners -> Raw -> Owners & D.Receipt<Raw>,~admit:Owners -> D.Receipt<Raw> -> Owners & Observation,owners:Owners,raw:Raw) -> Owners & Observation:
17 decoded(~Raw,~Owners,~Observation,~admit,decode(owners,raw))
18def constructed(~Raw:Type,~Owners:Type,~Observation:Data,~decode:Owners -> Raw -> Owners & D.Receipt<Raw>,~admit:Owners -> D.Receipt<Raw> -> Owners & Observation,~body:@-H:Type -> Cap.Request<H,Raw,Observation> -> 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
21def provision_declared(~S:Data,~Owners:Type,~Output:Type,~launch:Owners -> Output,fragment:SF.Fragment<S,Owners>,required:List<&2,SF.Entry<S>>) -> SF.Bound<S,Owners,Output>:
22 SF.bind_declared(~S,~Owners,~Output,~launch,fragment,required)