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# Enum by name (from_name = the generated E.from_name) or by number; null -> 0.
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"}

Uses (9)

Used by (1)