Crate musli_descriptive

Crate musli_descriptive 

Source
Expand description

github crates.io docs.rs

A fully self-descriptive format for Müsli.

Descriptive encoding is fully upgrade stable:

  • ✔ Can tolerate missing fields if they are annotated with #[musli(default)].
  • ✔ Can skip over unknown fields.
  • ✔ Can be fully converted back and forth between dynamic containers such as the Value type.
  • ✔ Can handle coercion from different types of primitive types, such as signed to unsigned integers. So primitive field types can be assuming they only inhabit compatible values.

This means that it’s suitable as a wire and general interchange format. It’s also suitable for dynamically translating to and from different wire formats such as JSON without having access to the data model.

use musli::{Encode, Decode};

#[derive(Debug, PartialEq, Encode, Decode)]
struct Version1 {
    name: String,
}

#[derive(Debug, PartialEq, Encode, Decode)]
struct Version2 {
    name: String,
    #[musli(default)]
    age: Option<u32>,
}

let version2 = musli_descriptive::to_vec(&Version2 {
    name: String::from("Aristotle"),
    age: Some(62),
})?;

let version1: Version1 = musli_descriptive::decode(version2.as_slice())?;

assert_eq!(version1, Version1 {
    name: String::from("Aristotle"),
});

§Configuring

To configure the behavior of the wire format you can use the Encoding type:

use musli_descriptive::Encoding;
use musli::{Encode, Decode};

const CONFIG: Encoding = Encoding::new();

#[derive(Debug, PartialEq, Encode, Decode)]
struct Struct<'a> {
    name: &'a str,
    age: u32,
}

let mut out = Vec::new();

let expected = Struct {
    name: "Aristotle",
    age: 61,
};

CONFIG.encode(&mut out, &expected)?;
let actual = CONFIG.decode(&out[..])?;

assert_eq!(expected, actual);

§Implementation details

Each field is prefix typed with a single byte tag that describes exactly the type which is contained in the field.

Modules§

encoding
Module that defines Encoding whith allows for customization of the encoding format, and the DEFAULT encoding configuration.
tag
Type flags available for musli-wire.

Structs§

Encoding
Setting up encoding with parameters.
Error
Error raised during descriptive encoding.

Constants§

OPTIONS
The default flavor used by the DEFAULT configuration.

Functions§

decode
Decode the given type T from the given Reader using the DEFAULT configuration.
encode
Encode the given value to the given Writer using the DEFAULT configuration.
from_slice
Decode the given type T from the given slice using the DEFAULT configuration.
to_fixed_bytes
Encode the given value to a fixed-size bytes using the DEFAULT configuration.
to_vecalloc
Encode the given value to a Vec using the DEFAULT configuration.
to_writerstd
Encode the given value to the given Write using the DEFAULT configuration.

Type Aliases§

Result
Convenient result alias for use with musli_descriptive.