messagepack_rs/
value.rs

1use crate::binary::Binary;
2use crate::deserializable::Deserializable;
3use crate::extension::Extension;
4use crate::serializable::{Serializable, SerializeError};
5use chrono::prelude::*;
6use messagepack_rs_macros::MessagePackFrom;
7use std::collections::BTreeMap;
8
9#[derive(Clone, Debug, PartialEq, MessagePackFrom)]
10pub enum Value {
11    Nil,
12    Bool(bool),
13    Float32(f32),
14    Float64(f64),
15    UInt8(u8),
16    UInt16(u16),
17    UInt32(u32),
18    UInt64(u64),
19    Int8(i8),
20    Int16(i16),
21    Int32(i32),
22    Int64(i64),
23    Binary(Binary),
24    String(String),
25    Array(Vec<Self>),
26    Map(BTreeMap<String, Self>),
27    Extension(Extension),
28    Timestamp(DateTime<Utc>),
29}
30
31impl Serializable for Value {
32    fn serialize(self) -> Result<Vec<u8>, SerializeError> {
33        match self {
34            Self::Nil => Self::serialize_nil(),
35            Self::Bool(v) => Self::serialize_bool(v),
36            Self::Float32(v) => Self::serialize_float32(v),
37            Self::Float64(v) => Self::serialize_float64(v),
38            Self::UInt8(v) => Self::serialize_uint8(v),
39            Self::UInt16(v) => Self::serialize_uint16(v),
40            Self::UInt32(v) => Self::serialize_uint32(v),
41            Self::UInt64(v) => Self::serialize_uint64(v),
42            Self::Int8(v) => Self::serialize_int8(v),
43            Self::Int16(v) => Self::serialize_int16(v),
44            Self::Int32(v) => Self::serialize_int32(v),
45            Self::Int64(v) => Self::serialize_int64(v),
46            Self::Binary(v) => Self::serialize_binary(v),
47            Self::String(v) => Self::serialize_string(v),
48            Self::Array(v) => Self::serialize_array(v),
49            Self::Map(v) => Self::serialize_map(v),
50            Self::Extension(v) => Self::serialize_extension(v),
51            Self::Timestamp(v) => Self::serialize_timestamp(v),
52        }
53    }
54}
55
56impl Deserializable for Value {}