litl_val/to_other/
serialize.rs

1use serde::Serialize;
2
3use super::super::{Val, ValE};
4
5impl Serialize for ValE {
6    #[inline]
7    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
8    where
9        S: serde::Serializer,
10    {
11        match self {
12            ValE::Null => serializer.serialize_none(),
13            ValE::Bool(b) => serializer.serialize_bool(*b),
14            ValE::Number(n) => serializer.serialize_f64(n.into_inner()),
15            ValE::ShortString(s) => serializer.serialize_str(s.as_ref()),
16            ValE::LongString(s) => serializer.serialize_str(s.as_ref()),
17            ValE::Array(a) => serializer.collect_seq(a.as_ref().iter()),
18            ValE::Object(o) => {
19                serializer.collect_map(o.entries().iter().map(|(k, v)| (k.as_ref(), v)))
20            }
21        }
22    }
23}
24
25impl Serialize for Val {
26    #[inline]
27    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
28    where
29        S: serde::Serializer,
30    {
31        let unsafe_clone = Into::<ValE>::into(Val(self.0));
32        let result = unsafe_clone.serialize(serializer)?;
33        std::mem::forget(unsafe_clone);
34        Ok(result)
35    }
36}