litl_val/to_other/
serialize.rs1use 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}