teo_parser/value/
serialize.rs1use 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}