decode_size.bend
bendvy-ecs-core@0.1.0.0 · 21 lines · 0 definitions
1import Base
2import bendvy-ecs-core@0.1.0.0/decode_data.bend as D
3
4def codec_size(codec:D.Codec) -> Nat:
5 match codec:
6 case D.Nullable{inner}: Nat.add(1n,codec_size(inner))
7 case D.ArrayValue{inner}: Nat.add(1n,codec_size(inner))
8 case D.Struct{[]}: 1n
9 case D.Struct{D.NamedCodec{_,child} <> rest}: Nat.add(1n,Nat.add(codec_size(child),codec_size(D.Struct{rest})))
10 case _: 1n
11
12def raw_size(raw:D.Raw) -> Nat:
13 match raw:
14 case D.Array{[]}: 1n
15 case D.Array{head <> rest}: Nat.add(raw_size(head),raw_size(D.Array{rest}))
16 case D.Object{[]}: 1n
17 case D.Object{D.Field{_,child} <> rest}: Nat.add(raw_size(child),raw_size(D.Object{rest}))
18 case _: 1n
19
20def budget(codec:D.Codec,raw:D.Raw) -> Nat:
21 Nat.mul(4n,Nat.mul(codec_size(codec),Nat.add(raw_size(raw),1n)))