ordinary_app_description.bend

bendvy-ecs-core@0.1.0.0 · 28 lines · 0 definitions

1import Base
2import bendvy-ecs-core@0.1.0.0/ordinary_app_registration_fields.bend as Records
3import bendvy-ecs-core@0.1.0.0/ordinary_query_declaration.bend as Query
4import bendvy-ecs-core@0.1.0.0/ordinary_app_observation_data.bend as DTO
5# Called only from enabled snapshot. Ordinary fields are not a cached description.
6def resource_clauses(~S:Data,+mode:Query.Mode,access:List<&2,String>) -> List<&2,Query.Clause<S>>:
7  match access:
8    case []:[]
9    case name <> rest:Query.Clause{name,mode} <> resource_clauses(~S,mode,rest)
10def mixed_clauses(~S:Data,uses:List<&2,Records.DeclaredUse>) -> List<&2,Query.Clause<S>>:
11  match uses:
12    case []:[]
13    case Records.DeclaredUse{_,_,key,mode} <> rest:Query.Clause{key,mode} <> mixed_clauses(~S,rest)
14def clauses(~S:Data,kind:Records.RegistrationKind,access:List<&2,String>,retained:List<&2,Query.Clause<S>>) -> List<&2,Query.Clause<S>>:
15  match kind:
16    case Records.ComponentKind{}:retained
17    case Records.FieldKind{}:retained
18    case Records.ServiceKind{}:[]
19    case Records.EventKind{}:retained
20    case Records.MixedKind{uses}:mixed_clauses(~S,uses)
21    case Records.ResourceKind{mode}:resource_clauses(~S,mode,access)
22def binding(~S:Data,fields:Records.Fields<S>) -> DTO.Binding<S>:
23  match fields:
24    case Records.Fields{+namespace,+id,+name,+access,+cursor,+slot,retained,kind}:DTO.Binding{namespace,id,name,access,cursor,slot,clauses(~S,kind,access,retained)}
25def bindings(~S:Data,records:List<&2,Records.Fields<S>>) -> List<&2,DTO.Binding<S>>:
26  match records:
27    case []:[]
28    case record <> rest:binding(~S,record) <> bindings(~S,rest)