ordinary_bundle.bend
bendvy-ecs-core@0.1.0.4 · 40 lines · 6 definitions
1import Base
2import ordinary_declaration.bend as Identity
3import schema_fragments.bend as SF
4import bundle_pack.bend as Pack
5import bundle_requests.bend as Cmd
6import bundle_construction.bend as CS
7import bundle_insert_adapter.bend as AD
8
9
10
11
12
13
14type Plan<-S:Data,-Raw:Type,-Cooked:Type> is Data:
15 Plan{entries:List<&2,SF.Entry<S>>}
16
17def terminal(~S:Data) -> Plan<S,Unit,Unit>:Plan{[]}
18
19
20def component(~S:Data,~I:Type,~P:Type,+identity:Identity.Declaration<S,P>) -> Plan<S,I,P>:
21 Plan{[SF.Entry{SF.Component{},Identity.key(~S,~P,identity),Identity.key(~S,~P,identity)}]}
22
23
24
25def compose(~S:Data,~HR:Type,~HC:Type,~TR:Type,~TC:Type,head:Plan<S,HR,HC>,tail:Plan<S,TR,TC>) -> Plan<S,Pack.Pack<HR,TR>,Pack.Pack<HC,TC>>:
26 match head tail:
27 case Plan{heads} Plan{tails}:Plan{List.append(&2,SF.Entry<S>,heads,tails)}
28def checked(~S:Data,~Store:Type,~R:Type,~E:Data,~Packet:Type,~Context:Type,~Raw:Type,~Cooked:Type,~Error:Data,~construct:Context -> Raw -> CS.Staged<Context,Raw,Cooked,Error>,~pack:Cooked -> (Cooked -> Raw) -> Packet,~unpack:Packet -> Raw,validation:SF.Validation,owner:AD.Owner<S,Store,R,E,Packet,Context>,input:Cmd.Input<S,Raw>) -> AD.Owner<S,Store,R,E,Packet,Context> & Cmd.Output<S,Raw,Error>:
29 match validation input:
30 case SF.Invalid{error} Cmd.Input{_,raw}:(owner,Cmd.Refused{raw,AD.DeclarationRefused{error}})
31 case SF.Valid{} input:Cmd.request(~S,~Store,~R,~E,~Packet,~Context,~Raw,~Cooked,~Error,~construct,~pack,~unpack,owner,input)
32
33
34
35
36
37
38def request(~S:Data,~Store:Type,~R:Type,~E:Data,~Packet:Type,~Context:Type,~Raw:Type,~Cooked:Type,~Error:Data,~construct:Context -> Raw -> CS.Staged<Context,Raw,Cooked,Error>,~pack:Cooked -> (Cooked -> Raw) -> Packet,~unpack:Packet -> Raw,plan:Plan<S,Raw,Cooked>,owner:AD.Owner<S,Store,R,E,Packet,Context>,input:Cmd.Input<S,Raw>) -> AD.Owner<S,Store,R,E,Packet,Context> & Cmd.Output<S,Raw,Error>:
39 match plan:
40 case Plan{entries}:checked(~S,~Store,~R,~E,~Packet,~Context,~Raw,~Cooked,~Error,~construct,~pack,~unpack,SF.validate(~S,entries),owner,input)