shiny_configuration/value/
serialize.rs1use serde::ser::{SerializeMap, SerializeSeq};
2use serde::{Serialize, Serializer};
3use crate::value::number::Number;
4use crate::value::Value;
5
6impl Serialize for Value {
7 fn serialize<S: Serializer>(&self, ser: S) -> Result<S::Ok, S::Error> {
8 match self {
9 Value::String(v) => ser.serialize_str(v),
10 Value::Bool(v) => ser.serialize_bool(*v),
11 Value::Number(v) => v.serialize(ser),
12 Value::None => ser.serialize_none(),
13 Value::Map(v) => {
14 let mut map = ser.serialize_map(Some(v.len()))?;
15 for (key, val) in v {
16 map.serialize_entry(key, val)?;
17 }
18
19 map.end()
20 }
21 Value::Array(v) => {
22 let mut seq = ser.serialize_seq(Some(v.len()))?;
23 for elem in v {
24 seq.serialize_element(elem)?;
25 }
26
27 seq.end()
28 }
29 }
30 }
31}
32
33impl Serialize for Number {
34 fn serialize<S: Serializer>(&self, ser: S) -> Result<S::Ok, S::Error> {
35 match *self {
36 Number::Integer(v) => ser.serialize_i64(v),
37 Number::Float(v) => ser.serialize_f64(v),
38 Number::UInteger(v) => ser.serialize_u64(v)
39 }
40 }
41}