jimtcl 0.3.0

Embed Jim Tcl in Rust.
Documentation
#![cfg(feature = "serde")]
use serde::de::DeserializeSeed;

use jimtcl::Interp;
use jimtcl::{JimError, JimResult};

#[test]
pub fn test_null() -> JimResult<()> {
    let interp = Interp::new()?;
    let input = serde_json::de::StrRead::new("null");
    let mut json_de = serde_json::Deserializer::new(input);
    let jim = interp.deserialize(&mut json_de).map_err(JimError::wrap)?;
    assert!(jim.is_empty());
    assert_eq!(&jim.to_string(), "");
    Ok(())
}

#[test]
pub fn test_str() -> JimResult<()> {
    let interp = Interp::new()?;
    let input = serde_json::de::StrRead::new("\"HACKEM MUCHE\"");
    let mut json_de = serde_json::Deserializer::new(input);
    let jim = interp.deserialize(&mut json_de).map_err(JimError::wrap)?;
    assert!(!jim.is_empty());
    assert_eq!(jim.len(), 12);
    assert_eq!(&jim.to_string(), "HACKEM MUCHE");
    Ok(())
}

#[test]
pub fn test_list() -> JimResult<()> {
    let interp = Interp::new()?;
    let input = serde_json::de::StrRead::new("[1, false]");
    let mut json_de = serde_json::Deserializer::new(input);
    let jim = interp.deserialize(&mut json_de).map_err(JimError::wrap)?;
    assert!(!jim.is_empty());
    assert_eq!(jim.list_length(), 2);
    assert_eq!(&jim.to_string(), "1 0");
    Ok(())
}

#[test]
pub fn test_dict() -> JimResult<()> {
    let interp = Interp::new()?;
    let input = serde_json::de::StrRead::new("{\"x\": 17}");
    let mut json_de = serde_json::Deserializer::new(input);
    let jim = interp.deserialize(&mut json_de).map_err(JimError::wrap)?;
    assert!(!jim.is_empty());
    assert_eq!(jim.list_length(), 2);
    assert_eq!(jim.dict_size()?, 1);
    let val = jim.dict_get("x")?.unwrap();
    let n = u32::try_from(&val)?;
    assert_eq!(n, 17);
    Ok(())
}