## The data model of Müsli.
Müsli supports the following fundamental types:
* Empty.
* Boolean values.
* Unsigned integers (corresponding to [u8], [u16], [u32], [u64], and
[u128]).
* Signed integers (corresponding to [i8], [i16], [i32], [i64], and [i128]).
* Floats (corresponding to [f32] and [f64]).
* Optional values.
* Bytes, a raw byte sequence.
* Strings, a byte sequence known to be a valid utf-8 string.
* Sequences.
* Maps. There is no restriction on the key, and they can contain
duplicates.
* A variant, which is a simple kind of container containing a
key and a value. The key is the discriminant identifying the variant.
These are used as the basis to serialize any Rust type.
By default, Rust types are mapped like the following:
* Structs are serialized as maps, where the key is the `#[musli(name =..)]`
of the field.
* Tuples are serialized as sequences.
* Enums are serialized as variants, where the key is the `#[musli(name =
..)]` of the variant.
To control the exact behavior of serialization, see the [`derives`] section.
[`Decode`]: <https://docs.rs/musli/latest/musli/trait.Decode.html>
[`derives`]: <https://docs.rs/musli/latest/musli/_help/derives/index.html>
[`Encode`]: <https://docs.rs/musli/latest/musli/trait.Encode.html>
[`storage`]: <https://docs.rs/musli/latest/musli/storage/index.html>