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

method Encoder.endList

Ends the list that beginList started.

Example:

oxl✓ проверяется в CI
use std.ser { encode, bytesOf, Format, Encoder, Decoder }

// a debugging text format that prints every event it receives
data Log { out: String }

impl Encoder for Log {
  var fn beginMessage(name: str) { out.push("<{name}") }
  var fn endMessage() { out.push(">") }
  var fn field(tag: u32, name: str) { out.push(" {tag}:{name}=") }
  var fn writeI64(v: i64) { out.push("i{v}") }
  var fn writeU64(v: u64) { out.push("u{v}") }
  var fn writeF64(v: f64) { out.push("f{v}") }
  var fn writeBool(v: bool) { out.push(if v { "T" } else { "F" }) }
  var fn writeStr(v: str) { out.push("'{v}'") }
  var fn writeBytes(v: bytes) { out.push("b{v.len()}") }
  var fn writeNull() { out.push("null") }
  var fn beginList(len: usize) { out.push("[{len}:") }
  var fn endList() { out.push("]") }
  var fn beginMap(len: usize) { out.push("{{{len}:") }
  var fn endMap() { out.push("}}") }
  var fn finish() -> bytes {
    let text = out.freeze()
    bytesOf(&text)
  }
}

data NoDecoder {}

impl Decoder for NoDecoder {}

data LogFormat {}

impl Format for LogFormat {
  fn name() -> str => "log"
  fn encoder() -> Encoder => Log{ out: String.new() }
  fn decoder(input: bytes) -> Decoder => NoDecoder{}
}

fn show<T: Serializable>(x: T) -> str {
  comptime { std.ser.register(LogFormat) }
  match encode(x, LogFormat) {
    bytes b => {
      match Utf8.decode(b) {
        str t => t
        DecodeError _ => "?"
      }
    }
    EncodeError _ => "encode error"
  }
}

data N { v: Set<str> }

fn main() io {
  var s: Set<str> = Set.new()
  s.insert("a")
  print(show(N{ v: s }))
}
Вывод
<N 1:v=[1:'a']>
var fn endList()

С версии. 1.0.0-beta

Эффекты

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

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

См. также