decode.bend
bendvy-ecs-core@0.1.0.1 · 14 lines · 0 definitions
1import Base
2import bendvy-ecs-core@0.1.0.1/decode_data.bend as D
3import bendvy-ecs-core@0.1.0.1/decode_size.bend as Size
4
5# decode_owner uses the one Raw returned by the closed actual-owner projection.
6# decode_budget is a trusted low-level helper taking separate Raw, fuel and owner.
7# decode_owner derives structural fuel and does not invent a Raw-to-Owner inverse.
8def decode_budget(~Owner:Type,+codec:D.Codec,raw:D.Raw,+fuel:Nat,owner:Owner) -> D.Receipt<Owner>:
9 D.normalized(~Owner,fuel,codec,D.owned(~Owner,fuel,codec,D.Owned{owner,raw}))
10def decode_projected(~Owner:Type,+codec:D.Codec,observed:Owner & D.Raw) -> D.Receipt<Owner>:
11 match observed:
12 case (owner,+raw): decode_budget(~Owner,codec,raw,Size.budget(codec,raw),owner)
13def decode_owner(~Owner:Type,~project:Owner -> Owner & D.Raw,codec:D.Codec,owner:Owner) -> D.Receipt<Owner>:
14 decode_projected(~Owner,codec,project(owner))