teo_parser/value/
serialize.rs

1use serde::{Serialize, Serializer};
2use serde::ser::{SerializeMap};
3use chrono::SecondsFormat;
4use crate::value::Value;
5
6impl Serialize for Value {
7
8    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: Serializer {
9        match self {
10            Value::Null => serializer.serialize_none(),
11            Value::Bool(b) => serializer.serialize_bool(*b),
12            Value::Int(i) => {
13                let mut map = serializer.serialize_map(Some(1))?;
14                map.serialize_entry("$int", i)?;
15                map.end()
16            },
17            Value::Int64(i) => {
18                let mut map = serializer.serialize_map(Some(1))?;
19                map.serialize_entry("$int64", i)?;
20                map.end()
21            },
22            Value::Float32(f) => {
23                let mut map = serializer.serialize_map(Some(1))?;
24                map.serialize_entry("$float32", f)?;
25                map.end()
26            },
27            Value::Float(f) => {
28                let mut map = serializer.serialize_map(Some(1))?;
29                map.serialize_entry("$float", f)?;
30                map.end()
31            },
32            Value::Decimal(d) => {
33                let mut map = serializer.serialize_map(Some(1))?;
34                map.serialize_entry("$decimal", &d.normalized().to_string())?;
35                map.end()
36            }
37            Value::ObjectId(o) => {
38                let mut map = serializer.serialize_map(Some(1))?;
39                map.serialize_entry("$objectId", &o.to_hex())?;
40                map.end()
41            }
42            Value::String(s) => serializer.serialize_str(s),
43            Value::Date(d) => {
44                let mut map = serializer.serialize_map(Some(1))?;
45                map.serialize_entry("$date", &d.format("%Y-%m-%d").to_string())?;
46                map.end()
47            }
48            Value::DateTime(d) => {
49                let mut map = serializer.serialize_map(Some(1))?;
50                map.serialize_entry("$datetime", &d.to_rfc3339_opts(SecondsFormat::Millis, true))?;
51                map.end()
52            }
53            Value::Array(a) => serializer.collect_seq(a),
54            Value::Dictionary(d) => serializer.collect_map(d),
55            Value::Range(r) => {
56                let mut map = serializer.serialize_map(Some(1))?;
57                map.serialize_entry("$range", &r)?;
58                map.end()
59            }
60            Value::Tuple(t) => {
61                let mut map = serializer.serialize_map(Some(1))?;
62                map.serialize_entry("$tuple", &t)?;
63                map.end()
64            }
65            Value::InterfaceEnumVariant(e) => {
66                let mut map = serializer.serialize_map(Some(1))?;
67                map.serialize_entry("$interfaceEnumVariant", &e)?;
68                map.end()
69            }
70            Value::OptionVariant(o) => {
71                let mut map = serializer.serialize_map(Some(1))?;
72                map.serialize_entry("$optionVariant", &o)?;
73                map.end()
74            }
75            Value::Regex(r) => {
76                let mut map = serializer.serialize_map(Some(1))?;
77                map.serialize_entry("$regex", &r.to_string())?;
78                map.end()
79            }
80            Value::Type(t) => {
81                let mut map = serializer.serialize_map(Some(1))?;
82                map.serialize_entry("$type", &format!("{}", t))?;
83                map.end()
84            }
85        }
86    }
87}