tina-core 0.0.2

Tina platform
Documentation
//! 动态数据
use serde::{Serialize, Serializer};
use serde_json::Value;

/// 动态数据
#[derive(Debug, Clone)]
pub enum DynamicValue {
    /// bool
    Bool(bool),
    /// i8
    I8(i8),
    /// i16
    I16(i16),
    /// i32
    I32(i32),
    /// i64
    I64(i64),
    /// u8
    U8(u8),
    /// u16
    U16(u16),
    /// u32
    U32(u32),
    /// u64
    U64(u64),
    /// string
    Str(String),
    /// json
    Json(Value),
    /// null
    Null,
}

impl Serialize for DynamicValue {
    fn serialize<S>(&self, serializer: S) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where
        S: Serializer,
    {
        match self {
            DynamicValue::Bool(value) => value.serialize(serializer),
            DynamicValue::I8(value) => value.serialize(serializer),
            DynamicValue::I16(value) => value.serialize(serializer),
            DynamicValue::I32(value) => value.serialize(serializer),
            DynamicValue::I64(value) => value.serialize(serializer),
            DynamicValue::U8(value) => value.serialize(serializer),
            DynamicValue::U16(value) => value.serialize(serializer),
            DynamicValue::U32(value) => value.serialize(serializer),
            DynamicValue::U64(value) => value.serialize(serializer),
            DynamicValue::Str(value) => value.serialize(serializer),
            DynamicValue::Json(value) => value.serialize(serializer),
            DynamicValue::Null => serializer.serialize_unit(),
        }
    }
}

impl Default for DynamicValue {
    fn default() -> Self {
        Self::Null
    }
}