guartcl 0.5.0

Enhanced Jim Tcl.
Documentation
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(())
}