def read.enum
bendonnect-rpc@0.1.0.0 · src/pbjson.bend:582
import bendonnect-rpc@0.1.0.0/src/pbjson.bend as Pbjson
import Base
import bend-kit-bytes@0.3.2.0/bytes.bend as Bytes
import bend-kit-encoding@0.4.0.0/encoding.bend as Enc
import bend-kit-json@0.6.1.1/json.bend as Json
582
583def read.enum(~from_name: @+s: String -> Maybe<&2, U32>, v: Json.Val) -> Result<&2, &1, String, U32>:
584 match v:
585 case Json.Null{}:
586 Done{0}
587 case Json.Str{b}:
588 lift.m(U32, from_name(Enc.utf8.decode(b)), "unknown enum value")
589 case Json.Num{b}:
590 lift.m(U32, parse.int32(Bytes.to_string(b)), "invalid enum number")
591 case Json.Flag{on}:
592 Fail{"expected an enum name or number"}
593 case Json.Arr{xs}:
594 Fail{"expected an enum name or number"}
595 case Json.Obj{kvs}:
596 Fail{"expected an enum name or number"}