use serde::ser::{SerializeMap, SerializeSeq};
use serde::{Serialize, Serializer};
use crate::value::number::Number;
use crate::value::Value;
impl Serialize for Value {
fn serialize<S: Serializer>(&self, ser: S) -> Result<S::Ok, S::Error> {
match self {
Value::String(v) => ser.serialize_str(v),
Value::Bool(v) => ser.serialize_bool(*v),
Value::Number(v) => v.serialize(ser),
Value::None => ser.serialize_none(),
Value::Map(v) => {
let mut map = ser.serialize_map(Some(v.len()))?;
for (key, val) in v {
map.serialize_entry(key, val)?;
}
map.end()
}
Value::Array(v) => {
let mut seq = ser.serialize_seq(Some(v.len()))?;
for elem in v {
seq.serialize_element(elem)?;
}
seq.end()
}
}
}
}
impl Serialize for Number {
fn serialize<S: Serializer>(&self, ser: S) -> Result<S::Ok, S::Error> {
match *self {
Number::Integer(v) => ser.serialize_i64(v),
Number::Float(v) => ser.serialize_f64(v),
Number::UInteger(v) => ser.serialize_u64(v)
}
}
}