OxL Справочник OxL
РусскийEnglish

method Decoder.beginMessage

Starts reading a message; nextField then yields its fields until none.

Example:

oxl✓ проверяется в CI
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() -> () | DecodeError

С версии. 1.0.0-beta

Возвращает

()

Ошибки

  • DecodeError @error
  • `DecodeError.Malformed` when the next value is not a message.

Эффекты

не объявлены (чистая, пока тело не говорит иное)

Определено в: std/ser/ser.oxl:1705

См. также