tablestg 0.4.20

Storage for database tables
Documentation
use crate::*;

#[derive(
    Clone,
    Debug,
    Default,
    Hash,
    PartialEq,
    Eq,
    PartialOrd,
    Ord,
    serde::Serialize,
    serde::Deserialize,
)]
/// Generic value.
pub enum Value {
    #[default]
    Empty,
    Int(i64),
    String(LRc<LString>),
    Binary(LRc<LVec<u8>>),
    List(LRc<LVec<Value>>),
    Enum(usize, LBox<Value>),
    IList(LRc<LVec<i64>>),
    DataType(DataType),
}

impl Value {
    /// Get int ( Value must be Int ).
    pub fn int(&self) -> i64 {
        match self {
            Value::Int(x) => *x,
            _ => panic!("int expected"),
        }
    }

    /// Get reference to `LString` ( Value must be String )
    pub fn string(&self) -> &LString {
        match self {
            Value::String(s) => s,
            _ => panic!("string expected"),
        }
    }

    /// Get reference to `LVec<u8>` ( Value must be Binary )
    pub fn binary(&self) -> &LVec<u8> {
        match self {
            Value::Binary(b) => b,
            _ => panic!("binary expected"),
        }
    }

    /// Get reference to List LVec ( Value must be List )
    pub fn list(&self) -> &LVec<Value> {
        match self {
            Value::List(list) => list,
            _ => panic!("list expected"),
        }
    }

    /*
        /// Get mut reference to List LVec ( Value must be List )
        pub fn list_mut(&mut self) -> &mut LVec<Value> {
            match self {
                Value::List(list) => list,
                _ => panic!("list expected"),
            }
        }
    */

    /// Get references to Enum tag and value ( Value must be Enum ).
    pub fn en(&self) -> (&usize, &Value) {
        match self {
            Value::Enum(tag, bx) => (tag, &**bx),
            _ => panic!("enum expected"),
        }
    }

    /// Get mut references to Enum tag and value ( Value must be Enum ).
    pub fn en_mut(&mut self) -> (&usize, &mut Value) {
        match self {
            Value::Enum(tag, bx) => (tag, &mut **bx),
            _ => panic!("enum expected"),
        }
    }

    /// Get reference to IList LVec ( Value must be IList ).
    pub fn ilist(&self) -> &LVec<i64> {
        match self {
            Value::IList(list) => list,
            _ => panic!("ilist expected"),
        }
    }

    /*
        /// Get mut reference to IList LVec ( Value must be IList ).
        pub fn ilist_mut(&mut self) -> &mut LVec<i64> {
            match self {
                Value::IList(LRc::new(list)) => list,
                _ => panic!("ilist expected"),
            }
        }
    */

    /// Get reference to DataType ( Value must be DataType ).
    pub fn datatype(&self) -> &DataType {
        match self {
            Value::DataType(dt) => dt,
            _ => panic!("datatype expected"),
        }
    }

    /// Get mut reference to DataType ( Value must be DataType ).
    pub fn datatype_mut(&mut self) -> &mut DataType {
        match self {
            Value::DataType(dt) => dt,
            _ => panic!("datatype expected"),
        }
    }
}