dxr 0.8.0

Declarative XML-RPC
Documentation
use crate::serde::{XmlStruct, XmlStructMember, XmlValue};
use crate::xml::{deserialize_xml as from_str, serialize_xml as to_string};

#[test]
fn to_member() {
    let value = XmlStructMember::new(Into::into("answer"), XmlValue::i4(42));
    let expected = "<member><name>answer</name><value><i4>42</i4></value></member>";

    assert_eq!(to_string(&value).unwrap(), expected);
}

#[test]
fn from_member() {
    let value = "<member><name>answer</name><value><i4>42</i4></value></member>";
    let expected = XmlStructMember::new(Into::into("answer"), XmlValue::i4(42));

    assert_eq!(from_str::<XmlStructMember>(value).unwrap(), expected);
}

#[test]
fn to_struct_empty() {
    let value = XmlStruct::new(vec![]);
    let expected = "<struct></struct>";

    assert_eq!(to_string(&value).unwrap(), expected);
}

#[test]
fn from_struct_empty() {
    let value = "<struct/>";
    let expected = XmlStruct::new(vec![]);

    assert_eq!(from_str::<XmlStruct>(value).unwrap(), expected);

    let value = "<struct></struct>";
    let expected = XmlStruct::new(vec![]);

    assert_eq!(from_str::<XmlStruct>(value).unwrap(), expected);
}

#[test]
fn to_struct_one() {
    let value = XmlStruct::new(vec![XmlStructMember::new(Into::into("answer"), XmlValue::i4(42))]);
    let expected = "<struct><member><name>answer</name><value><i4>42</i4></value></member></struct>";

    assert_eq!(to_string(&value).unwrap(), expected);
}

#[test]
fn from_struct_one() {
    let value = "<struct><member><name>answer</name><value><i4>42</i4></value></member></struct>";
    let expected = XmlStruct::new(vec![XmlStructMember::new(Into::into("answer"), XmlValue::i4(42))]);

    assert_eq!(from_str::<XmlStruct>(value).unwrap(), expected);
}

#[test]
fn to_struct_two() {
    let value = XmlStruct::new(vec![
        XmlStructMember::new(Into::into("answer"), XmlValue::i4(42)),
        XmlStructMember::new(
            Into::into("question"),
            XmlValue::string(Into::into("The answer to life, the the universe, and everything")),
        ),
    ]);
    let expected = "<struct><member><name>answer</name><value><i4>42</i4></value></member><member><name>question</name><value><string>The answer to life, the the universe, and everything</string></value></member></struct>";

    assert_eq!(to_string(&value).unwrap(), expected);
}

#[test]
fn from_struct_two() {
    let value = "<struct><member><name>answer</name><value><i4>42</i4></value></member><member><name>question</name><value><string>The answer to life, the the universe, and everything</string></value></member></struct>";
    let expected = XmlStruct::new(vec![
        XmlStructMember::new(Into::into("answer"), XmlValue::i4(42)),
        XmlStructMember::new(
            Into::into("question"),
            XmlValue::string(Into::into("The answer to life, the the universe, and everything")),
        ),
    ]);

    assert_eq!(from_str::<XmlStruct>(value).unwrap(), expected);
}

#[test]
fn to_value_struct() {
    let value = XmlValue::structure(XmlStruct::new(vec![XmlStructMember::new(
        Into::into("answer"),
        XmlValue::i4(42),
    )]));
    let expected = "<value><struct><member><name>answer</name><value><i4>42</i4></value></member></struct></value>";

    assert_eq!(to_string(&value).unwrap(), expected);
}

#[test]
fn from_value_struct() {
    let value = "<value><struct><member><name>answer</name><value><i4>42</i4></value></member></struct></value>";
    let expected = XmlValue::structure(XmlStruct::new(vec![XmlStructMember::new(
        Into::into("answer"),
        XmlValue::i4(42),
    )]));

    assert_eq!(from_str::<XmlValue>(value).unwrap(), expected);
}

#[cfg(feature = "nil")]
#[test]
fn roundtrip_option_none() {
    use crate::{TryFromValue, TryToValue};

    let value: Option<i32> = None;
    assert_eq!(
        <Option<i32>>::try_from_value(&value.try_to_value().unwrap()).unwrap(),
        value
    );
}