muesli 0.1.0

healthy implementation of PHP's serialization and session formats in Rust
Documentation
use std::num::NonZeroUsize;

#[derive(Debug, Clone, PartialEq)]
pub enum Value<'a> {
    Null,
    Boolean(bool),
    Integer(i64),
    Decimal(f64),
    String(&'a [u8]),
    Array(Vec<(ArrayKey<'a>, Value<'a>)>),
    Object {
        class_name: &'a [u8],
        properties: Vec<ObjectProperty<'a>>,
    },
    CustomObject {
        class_name: &'a [u8],
        data: &'a [u8],
    },
    ValueReference(NonZeroUsize),
    ObjectReference(NonZeroUsize),
}

#[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
pub enum ArrayKey<'a> {
    Integer(i64),
    String(&'a [u8]),
}

#[derive(Debug, Clone, PartialEq)]
pub enum ObjectPropertyVisibility {
    Public,
    Protected,
    Private,
}

#[derive(Debug, Clone, PartialEq)]
pub struct ObjectProperty<'a> {
    pub visibility: ObjectPropertyVisibility,
    pub name: &'a [u8],
    pub value: Value<'a>,
}

#[derive(Debug, Clone, PartialEq)]
pub struct SessionEntry<'a> {
    pub key: &'a [u8],
    pub value: Value<'a>,
}