diff options
Diffstat (limited to 'src/object/helper.rs')
-rw-r--r-- | src/object/helper.rs | 45 |
1 files changed, 18 insertions, 27 deletions
diff --git a/src/object/helper.rs b/src/object/helper.rs index 3f41703..74d18ea 100644 --- a/src/object/helper.rs +++ b/src/object/helper.rs @@ -86,38 +86,29 @@ impl Value { } } pub fn to_json(self) -> serde_json::Value { + use serde_json::{Number, Value as V}; match self { - Value::Bool(x) => serde_json::Value::Bool(x), - Value::U8(x) => serde_json::Value::Number(x.into()), - Value::I8(x) => serde_json::Value::Number(x.into()), - Value::U16(x) => serde_json::Value::Number(x.into()), - Value::I16(x) => serde_json::Value::Number(x.into()), - Value::U32(x) => serde_json::Value::Number(x.into()), - Value::U64(x) => serde_json::Value::Number(x.into()), - Value::I32(x) => serde_json::Value::Number(x.into()), - Value::F32(x) => serde_json::Value::Number( - serde_json::Number::from_f64(x as f64).unwrap_or(0.into()), - ), - Value::I64(x) => serde_json::Value::Number(x.into()), - Value::F64(x) => serde_json::Value::Number(serde_json::Number::from_f64(x).unwrap()), - Value::String(x) => serde_json::Value::String(x), - Value::Typeless(values) => serde_json::Value::Array( - values - .into_iter() - .map(|e| serde_json::Value::Number(e.into())) - .collect(), - ), - Value::Array(values) => { - serde_json::Value::Array(values.into_iter().map(Value::to_json).collect()) + Value::Bool(x) => V::Bool(x), + Value::U8(x) => V::Number(x.into()), + Value::I8(x) => V::Number(x.into()), + Value::U16(x) => V::Number(x.into()), + Value::I16(x) => V::Number(x.into()), + Value::U32(x) => V::Number(x.into()), + Value::U64(x) => V::Number(x.into()), + Value::I32(x) => V::Number(x.into()), + Value::F32(x) => V::Number(Number::from_f64(x as f64).unwrap_or(0.into())), + Value::I64(x) => V::Number(x.into()), + Value::F64(x) => V::Number(Number::from_f64(x).unwrap()), + Value::String(x) => V::String(x), + Value::Typeless(values) => { + V::Array(values.into_iter().map(|e| V::Number(e.into())).collect()) } - Value::Object { class, fields } => serde_json::Value::Object( + Value::Array(values) => V::Array(values.into_iter().map(Value::to_json).collect()), + Value::Object { class, fields } => V::Object( fields .into_iter() .map(|(k, v)| (k, v.to_json())) - .chain(Some(( - "@class".to_string(), - serde_json::Value::String(class), - ))) + .chain(Some(("@class".to_string(), V::String(class)))) .collect(), ), } |