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}}