1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
use std::result::Result; use serde::{self, Serialize}; use ref_value::model::{RefValue, RefValueWrapper}; impl Serialize for RefValue { #[inline] fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: serde::Serializer { match *self { RefValue::Null => serializer.serialize_unit(), RefValue::Bool(b) => serializer.serialize_bool(b), RefValue::Number(ref n) => n.serialize(serializer), RefValue::String(ref s) => serializer.serialize_str(s), RefValue::Array(ref v) => { use std::ops::Deref; let v: Vec<&RefValue> = v.iter().map(|v| v.deref()).collect(); v.serialize(serializer) }, RefValue::Object(ref m) => { use serde::ser::SerializeMap; use std::ops::Deref; let mut map = serializer.serialize_map(Some(m.len()))?; for (k, v) in m { map.serialize_key(k)?; map.serialize_value(v.deref())?; } map.end() } } } } impl Serialize for RefValueWrapper { #[inline] fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: serde::Serializer { use std::ops::Deref; match *self.deref() { RefValue::Null => serializer.serialize_unit(), RefValue::Bool(b) => serializer.serialize_bool(b), RefValue::Number(ref n) => n.serialize(serializer), RefValue::String(ref s) => serializer.serialize_str(s), RefValue::Array(ref v) => { use std::ops::Deref; let v: Vec<&RefValue> = v.iter().map(|v| v.deref()).collect(); v.serialize(serializer) }, RefValue::Object(ref m) => { use serde::ser::SerializeMap; use std::ops::Deref; let mut map = serializer.serialize_map(Some(m.len()))?; for (k, v) in m { map.serialize_key(k)?; map.serialize_value(v.deref())?; } map.end() } } } }