xmlity-quick-xml 0.0.9

XMLity implementation of quick-xml.
Documentation
use crate::define_test;

use xmlity::types::utils::CData;
use xmlity::{Deserialize, Serialize};

#[derive(Debug, PartialEq, Serialize, Deserialize)]
#[xelement(name = "elem")]
pub struct Elem(String);

#[derive(Debug, PartialEq, Serialize, Deserialize)]
#[xelement(name = "mixed")]
pub struct Mixed {
    pub text1: String,
    pub elem: Elem,
    pub text2: String,
}

fn simple_mixed_struct() -> Mixed {
    Mixed {
        text1: "Text".to_string(),
        elem: Elem("Content".to_string()),
        text2: "Text2".to_string(),
    }
}

define_test!(
    mixed_text_and_element,
    [(
        simple_mixed_struct(),
        "<mixed>Text<elem>Content</elem>Text2</mixed>"
    )]
);

#[derive(Debug, PartialEq, Serialize, Deserialize)]
#[xelement(name = "mixed")]
pub struct MixedCData {
    pub text1: String,
    pub cdata: CData<String>,
    pub elem: Elem,
    pub text2: String,
}

fn mixed_cdata_struct() -> MixedCData {
    MixedCData {
        text1: "Text".to_string(),
        cdata: CData("More".to_string()),
        elem: Elem("Content".to_string()),
        text2: "Text2".to_string(),
    }
}

#[derive(Debug, PartialEq, Serialize, Deserialize)]
#[xelement(name = "mixed")]
pub struct MixedCDataConcat {
    pub text1: String,
    pub text2: CData<String>,
    pub elem: Elem,
    pub text4: String,
}

fn mixed_cdata_concat_struct() -> MixedCDataConcat {
    MixedCDataConcat {
        text1: "Text1".to_string(),
        text2: CData("Text2".to_string()),
        elem: Elem("Text3".to_string()),
        text4: "Text4".to_string(),
    }
}

define_test!(
    mixed_text_cdata_and_element,
    [
        (
            mixed_cdata_struct(),
            "<mixed>Text<![CDATA[More]]><elem>Content</elem>Text2</mixed>"
        ),
        (
            mixed_cdata_concat_struct(),
            "<mixed>Text1<![CDATA[Text2]]><elem>Text3</elem>Text4</mixed>"
        )
    ]
);