use crate::typedata::TypedData;
#[test]
fn json_round_trip_null() -> serde_json::Result<()> {
let obj = TypedData::Null;
let json = serde_json::to_string(&obj)?;
assert_eq!(&json, "null");
let jsv: serde_json::Value = serde_json::from_str(&json)?;
assert_eq!(jsv, serde_json::Value::Null);
let mv: TypedData = serde_json::from_str(&json)?;
assert_eq!(&mv, &obj);
Ok(())
}
#[test]
fn json_round_trip_int() -> serde_json::Result<()> {
let obj = TypedData::Int(42);
let json = serde_json::to_string(&obj)?;
assert_eq!(&json, "42");
let jsv: serde_json::Value = serde_json::from_str(&json)?;
assert_eq!(
jsv,
serde_json::Value::Number(serde_json::Number::from_i128(42).unwrap())
);
let mv: TypedData = serde_json::from_str(&json)?;
assert_eq!(&mv, &obj);
Ok(())
}
#[test]
fn json_list() -> serde_json::Result<()> {
let obj = TypedData::List(
vec![
TypedData::Int(42).into(),
TypedData::Str("foo".into()).into(),
]
.into(),
);
let json = serde_json::to_string(&obj)?;
let jsv: serde_json::Value = serde_json::from_str(&json)?;
match jsv {
serde_json::Value::Array(v) => {
assert_eq!(v.len(), 2);
}
_ => {
panic!("unexpected JSON value: {:?}", jsv);
}
}
let mv: TypedData = serde_json::from_str(&json)?;
match mv {
TypedData::List(v) => {
assert_eq!(v.len(), 2);
assert_eq!(*v[0], TypedData::Int(42));
assert_eq!(*v[1], TypedData::Str("foo".into()));
}
_ => panic!("unexpected TDS value: {:?}", mv),
}
Ok(())
}