use std::borrow::Cow; use similar_asserts::assert_eq; use instant_xml::{from_str, to_string, FromXml, ToXml}; #[derive(Debug, FromXml, PartialEq, ToXml)] #[xml(forward)] enum Foo { Bar(Bar), Baz(Baz), } #[derive(Debug, FromXml, PartialEq, ToXml)] struct Bar { bar: u8, } #[derive(Debug, FromXml, PartialEq, ToXml)] struct Baz { baz: String, } #[test] fn wrapped_enum() { let v = Foo::Bar(Bar { bar: 42 }); let xml = r#"42"#; assert_eq!(xml, to_string(&v).unwrap()); assert_eq!(v, from_str(xml).unwrap()); } #[derive(Debug, FromXml, PartialEq, ToXml)] #[xml(forward)] enum FooCow<'a> { Bar(Cow<'a, [BarBorrowed<'a>]>), Baz(Cow<'a, [BazBorrowed<'a>]>), } #[derive(Clone, Debug, FromXml, PartialEq, ToXml)] #[xml(rename = "Bar")] struct BarBorrowed<'a> { bar: Cow<'a, str>, } #[derive(Clone, Debug, FromXml, PartialEq, ToXml)] #[xml(rename = "Baz")] struct BazBorrowed<'a> { baz: Cow<'a, str>, } #[test] fn with_cow_accumulator() { let v = FooCow::Bar(Cow::Borrowed(&[BarBorrowed { bar: Cow::Borrowed("test"), }])); let xml = r#"test"#; assert_eq!(xml, to_string(&v).unwrap()); assert_eq!(v, from_str(xml).unwrap()); }