Crate musli_storage

Crate musli_storage 

Source
Expand description

github crates.io docs.rs

Super simple storage encoding for Müsli

The storage encoding is partially upgrade safe:

  • ✔ Can tolerate missing fields if they are annotated with #[musli(default)].
  • ✗ Cannot skip over extra unrecognized fields.

This means that it’s suitable as a storage format, since the data model only evolves in one place. But unsuitable as a wire format since it cannot allow clients to upgrade independent of each other.

See musli-wire for a fully upgrade safe format.

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_storage::to_vec(&Version2 {
    name: String::from("Aristotle"),
    age: Some(62),
})?;

assert!(musli_storage::decode::<_, Version1>(version2.as_slice()).is_err());

let version1 = musli_storage::to_vec(&Version1 {
    name: String::from("Aristotle"),
})?;

let version2: Version2 = musli_storage::decode(version1.as_slice())?;

assert_eq!(version2, Version2 {
    name: String::from("Aristotle"),
    age: None,
});

§Configuring

To tweak the behavior of the storage format you can use the Encoding type:

use musli::mode::Binary;
use musli::{Encode, Decode};
use musli_utils::options::{self, Options, Integer};
use musli_storage::Encoding;

const OPTIONS: Options = options::new().with_integer(Integer::Fixed).build();
const CONFIG: Encoding<OPTIONS> = Encoding::new().with_options();

#[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);

Modules§

encoding
Module that defines Encoding whith allows for customization of the encoding format, and the DEFAULT encoding configuration.

Structs§

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

Constants§

OPTIONS
Default options to use with Encoding.

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_storage.