rust_dynamic 0.48.0

Support for dynamically-typed values in run-time
Documentation
#[cfg(test)]
mod tests {
    #![allow(unused_imports)]
    use super::*;
    use rust_dynamic::value::Value;

    #[test]
    fn test_serialize_bin_int() {
        let data = Value::from(42 as i64).unwrap();
        let bin_out = data.to_binary().unwrap();
        assert_ne!(bin_out.len(), 0);
    }
    #[test]
    fn test_serialize_deserialize_bin_int() {
        let data = Value::from(42 as i64).unwrap();
        let bin_out = data.to_binary().unwrap();
        let data2 = Value::from_binary(bin_out).unwrap();
        assert_eq!(data2.cast_int().unwrap(), 42 as i64);
    }
    #[test]
    fn test_serialize_wrap_int() {
        let data = Value::from(42 as i64).unwrap();
        let bin_data = data.wrap().unwrap();
        assert_eq!(bin_data.len(), 79);
    }
    #[test]
    fn test_serialize_unwrap_int() {
        let data = Value::from(42 as i64).unwrap();
        let bin_data = data.wrap().unwrap();
        let data2 = bin_data.unwrap().unwrap();
        assert_eq!(data2.cast_int().unwrap(), 42);
    }
    #[test]
    fn test_serialize_unwrap_json1() {
        let data = Value::json(serde_json::json!(42));
        let bin_data = data.wrap().unwrap();
        let data2: Value = bin_data.unwrap().unwrap();
        let data3 = data2.cast_json_to_value().unwrap();
        assert_eq!(data3.cast_int().unwrap(), 42);
    }
    #[test]
    fn test_serialize_unwrap_dict() {
        let data = Value::dict();
        let bin_data = data.wrap().unwrap();
        let data2 = bin_data.unwrap().unwrap();
        assert_eq!(data2.len(), 0);
    }
    #[test]
    fn test_serialize_unwrap_list() {
        let data = Value::list();
        let bin_data = data.wrap().unwrap();
        let data2 = bin_data.unwrap().unwrap();
        assert_eq!(data2.len(), 0);
    }
    #[test]
    fn test_serialize_operator1() {
        let data = Value::operator(42, Value::from(42 as i64).unwrap(), Value::none());
        let bin_data = data.wrap().unwrap();
        let data2 = bin_data.unwrap().unwrap();
        assert_eq!(data2.type_name(), "Operator");
    }
    #[test]
    fn test_serialize_operator2() {
        let data = Value::operator(42, Value::from(42 as i64).unwrap(), Value::none());
        let bin_data = data.wrap().unwrap();
        let data2 = bin_data.unwrap().unwrap();
        assert_eq!(data2.cast_operator_opcode().unwrap(), 42 as i32);
    }
    #[test]
    fn test_serialize_operator3() {
        let data = Value::operator(42, Value::from(42 as i64).unwrap(), Value::none());
        let bin_data = data.wrap().unwrap();
        let data2 = bin_data.unwrap().unwrap();
        let opval = data2.cast_operator_value().unwrap();
        assert_eq!(opval.cast_int().unwrap(), 42 as i64);
    }
    #[test]
    fn test_serialize_operator4() {
        let mut data = Value::list();
        let data1 = Value::operator(42, Value::from(42 as i64).unwrap(), Value::none());
        data = data.push(data1);
        let bin_data = data.wrap().unwrap();
        let data2 = bin_data.unwrap().unwrap();
        assert_ne!(data2.len(), 0);
    }
    #[test]
    fn test_serialize_operator5() {
        let mut data = Value::list();
        let data1 = Value::operator(42, Value::from(42 as i64).unwrap(), Value::none());
        data = data.push(data1);
        let bin_data = data.wrap().unwrap();
        let data2 = bin_data.unwrap().unwrap();
        let op_object = data2.cast_list().unwrap();
        let opval = op_object[0].cast_operator_value().unwrap();
        assert_eq!(opval.cast_int().unwrap(), 42 as i64);
    }
    #[test]
    fn test_serialize_lambda() {
        let data = Value::lambda()
                        .push(Value::operator(42, Value::from(42 as i64).unwrap(), Value::none()))
                        .push(Value::operator(43, Value::from(43 as i64).unwrap(), Value::none()));

        let buffer = data.compile().unwrap();
        assert_ne!(buffer.len(), 0);
    }
}