method Decoder.beginMessage
Starts reading a message; nextField then yields its fields until none.
Example:
use std.ser { Codec, Encoder, Decoder, Schema, encode, decode, hex, EncodeError, DecodeError }
data Pair { a: i64; b: i64 }
data PairCodec {}
impl Codec<Pair> for PairCodec {
static fn encode(x: &Pair, w: &var Encoder) -> () | EncodeError {
w.beginMessage("Pair")
w.field(1, "a")
w.writeI64(x.a)
w.field(2, "b")
w.writeI64(x.b)
w.endMessage()
}
static fn decode(r: &var Decoder) -> Pair | DecodeError {
r.beginMessage()?
var a = 0
var b = 0
while let f? = r.nextField()? {
if f.tag == 1 { a = r.readI64()? } else { b = r.readI64()? }
}
r.endMessage()
Pair{ a: a, b: b }
}
static fn schema() -> Schema => Schema.of("message Pair {{ int64 a = 1; int64 b = 2; }}")
}var fn beginMessage() -> () | DecodeErrorSince. 1.0.0-beta
Returns
()
Errors
DecodeError@error- `DecodeError.Malformed` when the next value is not a message.
Effects
none declared (pure unless the body says otherwise)
Defined in: std/ser/ser.oxl:1705