From e739fdcf5b7802f30c4b5f7e651431189f1b7392 Mon Sep 17 00:00:00 2001 From: Adam Reichold Date: Thu, 28 Jul 2022 23:09:35 +0200 Subject: [PATCH] Use local name when choosing enum variant based on element name This is consistent to how struct fields are identified in `MapAccess::next_key_seed` as demonstrated by the two test cases. --- Changelog.md | 1 + src/de/var.rs | 2 +- tests/serde-de.rs | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/Changelog.md b/Changelog.md index 8fe54a0b..a53fecba 100644 --- a/Changelog.md +++ b/Changelog.md @@ -61,6 +61,7 @@ when an enum variant represented as a `Text` event (i.e. `tag`) and a document encoding is not an UTF-8 - [#434]: Fixed incorrect error generated in some cases by serde deserializer +- [#445]: Use local name without namespace prefix when selecting enum variants based on element names ### Misc Changes diff --git a/src/de/var.rs b/src/de/var.rs index 643825f6..513e896d 100644 --- a/src/de/var.rs +++ b/src/de/var.rs @@ -39,7 +39,7 @@ where // Escape sequences does not processed inside CDATA section DeEvent::CData(t) => EscapedDeserializer::new(Cow::Borrowed(t), decoder, false), DeEvent::Start(e) => { - EscapedDeserializer::new(Cow::Borrowed(e.name().into_inner()), decoder, false) + EscapedDeserializer::new(Cow::Borrowed(e.local_name().into_inner()), decoder, false) } _ => { return Err(DeError::Unsupported( diff --git a/tests/serde-de.rs b/tests/serde-de.rs index dec5c1ea..96cf9f5f 100644 --- a/tests/serde-de.rs +++ b/tests/serde-de.rs @@ -3732,6 +3732,22 @@ mod struct_ { ); } + #[test] + fn namespaces() { + let data: Struct = from_str( + // Comment for prevent unnecessary formatting - we use the same style in all tests + r#"42answer"#, + ) + .unwrap(); + assert_eq!( + data, + Struct { + float: 42.0, + string: "answer".into() + } + ); + } + maplike_errors!(Struct); } @@ -3927,6 +3943,22 @@ mod enum_ { } ); } + + #[test] + fn namespaces() { + let data: Node = from_str( + // Comment for prevent unnecessary formatting - we use the same style in all tests + r#"42answer"#, + ) + .unwrap(); + assert_eq!( + data, + Node::Struct { + float: 42.0, + string: "answer".into() + } + ); + } } mod nested_struct {