xmlity 0.0.9

A (de)serialization library for XML
Documentation
use rstest::rstest;
use std::{borrow::Cow, fmt::Debug};
use xmlity::{
    types::utils::{ValueOrWhitespace, Whitespace},
    value::from_value,
    xml, DeserializeOwned, XmlValue,
};

#[rstest]
#[case(xml!(""), Whitespace(Cow::Borrowed("")))]
#[case(xml!("   "), Whitespace(Cow::Borrowed("   ")))]
#[case(xml!("  \n\t "), Whitespace(Cow::Borrowed("  \n\t ")))]
fn whitespace<T: Into<XmlValue>>(#[case] input: T, #[case] expected: Whitespace) {
    let input = input.into();
    let actual = from_value::<Whitespace>(&input).unwrap();

    pretty_assertions::assert_eq!(expected, actual);
}

#[rstest]
#[case(xml!(""), ValueOrWhitespace::<()>::Whitespace(Cow::Borrowed("")))]
#[case(xml!("Text"), ValueOrWhitespace::<String>::Value("Text".to_owned()))]
#[case(xml!("   "), ValueOrWhitespace::<f32>::Whitespace(Cow::Borrowed("   ")))]
#[case(xml!("  \n\t "), ValueOrWhitespace::<f32>::Whitespace(Cow::Borrowed("  \n\t ")))]
#[case(xml!("5.0"), ValueOrWhitespace::<f32>::Value(5.0))]
fn value_or_whitespace<T: Into<XmlValue>, U: DeserializeOwned + PartialEq + Debug>(
    #[case] input: T,
    #[case] expected: ValueOrWhitespace<U>,
) {
    let input = input.into();
    let actual = from_value::<ValueOrWhitespace<U>>(&input).unwrap();

    pretty_assertions::assert_eq!(expected, actual);
}