shiny_configuration/value/
serialize.rs

1use 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}