Skip to content

Commit ad57bc2

Browse files
authored
Merge pull request #445 from adamreichold/enum-tag-local-name
Use local name when choosing enum variant based on element name
2 parents e98ad65 + e739fdc commit ad57bc2

File tree

3 files changed

+34
-1
lines changed

3 files changed

+34
-1
lines changed

Changelog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
when an enum variant represented as a `Text` event (i.e. `<xml>tag</xml>`)
6262
and a document encoding is not an UTF-8
6363
- [#434]: Fixed incorrect error generated in some cases by serde deserializer
64+
- [#445]: Use local name without namespace prefix when selecting enum variants based on element names
6465

6566
### Misc Changes
6667

src/de/var.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ where
3939
// Escape sequences does not processed inside CDATA section
4040
DeEvent::CData(t) => EscapedDeserializer::new(Cow::Borrowed(t), decoder, false),
4141
DeEvent::Start(e) => {
42-
EscapedDeserializer::new(Cow::Borrowed(e.name().into_inner()), decoder, false)
42+
EscapedDeserializer::new(Cow::Borrowed(e.local_name().into_inner()), decoder, false)
4343
}
4444
_ => {
4545
return Err(DeError::Unsupported(

tests/serde-de.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3732,6 +3732,22 @@ mod struct_ {
37323732
);
37333733
}
37343734

3735+
#[test]
3736+
fn namespaces() {
3737+
let data: Struct = from_str(
3738+
// Comment for prevent unnecessary formatting - we use the same style in all tests
3739+
r#"<root xmlns:namespace="http://name.space"><namespace:float>42</namespace:float><string>answer</string></root>"#,
3740+
)
3741+
.unwrap();
3742+
assert_eq!(
3743+
data,
3744+
Struct {
3745+
float: 42.0,
3746+
string: "answer".into()
3747+
}
3748+
);
3749+
}
3750+
37353751
maplike_errors!(Struct);
37363752
}
37373753

@@ -3927,6 +3943,22 @@ mod enum_ {
39273943
}
39283944
);
39293945
}
3946+
3947+
#[test]
3948+
fn namespaces() {
3949+
let data: Node = from_str(
3950+
// Comment for prevent unnecessary formatting - we use the same style in all tests
3951+
r#"<namespace:Struct xmlns:namespace="http://name.space"><float>42</float><string>answer</string></namespace:Struct>"#,
3952+
)
3953+
.unwrap();
3954+
assert_eq!(
3955+
data,
3956+
Node::Struct {
3957+
float: 42.0,
3958+
string: "answer".into()
3959+
}
3960+
);
3961+
}
39303962
}
39313963

39323964
mod nested_struct {

0 commit comments

Comments
 (0)