From e04ae5929644516d0b8fb335f9230f31b0099440 Mon Sep 17 00:00:00 2001 From: Lennart <18233294+lennart-k@users.noreply.github.com> Date: Sat, 18 Jan 2025 14:00:12 +0100 Subject: [PATCH] xml: Add test that untagged enums work properly --- crates/xml/tests/de_enum.rs | 49 +++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/crates/xml/tests/de_enum.rs b/crates/xml/tests/de_enum.rs index 5df786c..319b777 100644 --- a/crates/xml/tests/de_enum.rs +++ b/crates/xml/tests/de_enum.rs @@ -112,3 +112,52 @@ fn test_enum_document() { Document::Goodbye ); } + +#[test] +fn test_untagged_enum() { + #[derive(Debug, XmlDeserialize, XmlRootTag, PartialEq)] + #[xml(root = b"document")] + struct Document { + prop: PropElement, + } + + #[derive(Debug, XmlDeserialize, PartialEq)] + struct PropElement { + #[xml(ty = "untagged", flatten)] + props: Vec, + } + + #[derive(Debug, XmlDeserialize, PartialEq)] + #[xml(untagged)] + enum Prop { + DefaultProp(DefaultProp), + ExtensionProp(ExtensionProp), + } + + #[derive(Debug, XmlDeserialize, PartialEq)] + enum DefaultProp { + Displayname(String), + } + #[derive(Debug, XmlDeserialize, PartialEq)] + enum ExtensionProp { + Extension(Extension), + } + + #[derive(Debug, XmlDeserialize, PartialEq)] + struct Extension { + okay: Option<()>, + nice: Option<()>, + } + + let doc = Document::parse_str( + r#" + + Hello + + Hello + + "#, + ) + .unwrap(); + dbg!(doc); +}