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 {}