def expand

bendvy-ecs-core@0.1.0.3 · decode_data.bend:144

import bendvy-ecs-core@0.1.0.3/decode_data.bend as DecodeData
import Base
import entity_key.bend as Key
import bendvy-ecs-core@0.1.0.3/decode_utf16.bend as Utf16

144def expand(codec:Codec,+raw:Raw,+path:String,rest:List<&2,Work>) -> Step:
145  match codec raw:
146    case Integer{} Number{_}: Continue{rest}
147    case Integer{} SignedInteger{_,magnitude}: choose_checked(Nat.is_lt(Nat.div(magnitude,Nat.mul(65536n,65536n)),2097152n),path,"integer",raw,rest)
148    case Integer{} Float{+value}: choose_checked(F32.is_eq(F32.floor(value),value) && F32.is_lt(F32.abs(value),9007199254740992.0),path,"integer",raw,rest)
149    case Integer{} Binary64{high,low}: choose_checked(binary_integer(high,low),path,"integer",raw,rest)
150    case FiniteNumber{} Number{_}: Continue{rest}
151    case FiniteNumber{} SignedInteger{_,_}: Continue{rest}
152    case FiniteNumber{} Float{value}: choose_checked(F32.is_le(F32.abs(value),3.4028234e38),path,"finite number",raw,rest)
153    case FiniteNumber{} Binary64{high,_}: choose_checked(U32.is_lt(binary64_exponent(high),2047),path,"finite number",raw,rest)
154    case StringValue{} BendvyText{_}: Continue{rest}
155    case StringValue{} Utf16Text{units}: choose_checked(Utf16.valid(units),path,"string",raw,rest)
156    case BoolValue{} Boolean{_}: Continue{rest}
157    case Literal{value} _: choose_checked(equal(value,raw),path,"literal",raw,rest)
158    case LiteralValues{values} _: choose_checked(alternatives(values,raw),path,"literal",raw,rest)
159    case LiteralRendered{values,expected} _: choose_checked(alternatives(values,raw),path,expected,raw,rest)
160    case Nullable{_} Null{}: Continue{rest}
161    case Nullable{inner} _: Continue{Work{inner,raw,path} <> rest}
162    case ArrayValue{inner} Array{items}: Continue{array_work(inner,items,path,0,rest)}
163    case Struct{fields} Object{values}: Continue{struct_work(fields,values,path,rest)}
164    case HandleValue{ns} Handle{actual,id}: choose_checked(U32.is_eq(ns,actual) && U32.is_gt(Key.index(id),0),path,"same-world handle",raw,rest)
165    case Integer{} _: Stop{Invalid{path,"integer",raw}}
166    case FiniteNumber{} _: Stop{Invalid{path,"finite number",raw}}
167    case StringValue{} _: Stop{Invalid{path,"string",raw}}
168    case BoolValue{} _: Stop{Invalid{path,"boolean",raw}}
169    case ArrayValue{_} _: Stop{Invalid{path,"array",raw}}
170    case Struct{_} _: Stop{Invalid{path,"object",raw}}
171    case HandleValue{_} _: Stop{Invalid{path,"same-world handle",raw}}

Uses (28)

Used by (1)