encoding
formatos de serialização extras
Adições ao
encoding, reusando a mesma maquinaria de reflexão (§10) que já dá binário-nativo + JSON. Como oSerializableé auto-derivado porreflect(T), um formato novo é só um par de molds (to_<fmt>/from_<fmt>) varrendo os mesmos kinds, o que sai barato. Tier 1.
MessagePack e CBOR: binários schema-less
Seção intitulada “MessagePack e CBOR: binários schema-less”Reusam o reflect direto (são, como o binário-nativo, “structs viram bytes”; só muda o wire-format):
fn msgpack.encode[T](v: T) -> []bytefn msgpack.decode[T](data: []byte) -> Result[T, error{Malformed, Truncated}]fn cbor.encode[T](v: T) -> []bytefn cbor.decode[T](data: []byte) -> Result[T, error{Malformed, Truncated}]Também expõem a árvore dinâmica (como o json.Value) para dados sem tipo estático: msgpack.Value/
cbor.Value, com os mesmos acessores (get/as_int/…) do json.Value.
TOML: config
Seção intitulada “TOML: config”Casa com o mk.project já ser um manifesto. Tipado (deriva em struct) e dinâmico:
fn toml.decode[T](text: string) -> Result[T, error{Malformed}]fn toml.encode[T](v: T) -> stringfn toml.parse(text: string) -> Result[Value, error{Malformed}] // árvore dinâmicaCSV: tabular
Seção intitulada “CSV: tabular”Streaming (linha a linha sobre Readable/Writeable, estilo io.scanner), com header opcional:
fn csv.reader(r: Readable) -> CsvReaderfn (c: *CsvReader) rows() -> Iterator[List[string]] // cada linha já divididafn (c: *CsvReader) records[T]() -> Iterator[Result[T, error{Malformed}]] // mapeia p/ struct (header→campo)fn (c: CsvReader) err() -> Optional[error] // erro fora do loop (como Scanner)
fn csv.writer(w: Writeable) -> CsvWriterfn (c: *CsvWriter) write_row(fields: []string) -> error{Io}fn (c: *CsvWriter) write_record[T](v: T) -> error{Io} // struct → linhadecl CsvOptions { pub delimiter: byte; pub has_header: bool; pub quote: byte }Curadoria
Seção intitulada “Curadoria”- Reusam o reflect, não um sistema novo: msgpack/cbor são o mesmo “kind para bytes” do binário-nativo com outro wire; toml/csv mapeiam struct para texto pelos mesmos descritores. Custo marginal.
- Fora: YAML (gramática ambígua e traiçoeira, alto custo e baixo retorno no nosso uso); Protobuf (exige
schema/IDL, não cabe aqui: ver nota na fila; o plugin
protocé tooling, e o RPC binário nativo é a librpcfutura sobre oChannel[T]tipado). - Cada formato é opt-in (
use encoding.msgpacketc.): quem não usa não paga.