xso: discard xml:lang implicitly
Because this attribute may occur in random places, it makes no sense failing on it. We discard it after attribute processing though, so it can still be captured by structs which are explicitly interested in it.
This commit is contained in:
parent
70d635b0fb
commit
31d7bbf622
3 changed files with 27 additions and 1 deletions
|
|
@ -139,6 +139,23 @@ fn empty_unexpected_attribute() {
|
|||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg_attr(
|
||||
feature = "disable-validation",
|
||||
should_panic = "unexpected result: Ok("
|
||||
)]
|
||||
fn empty_ignores_xml_lang() {
|
||||
#[allow(unused_imports)]
|
||||
use core::{
|
||||
option::Option::{None, Some},
|
||||
result::Result::{Err, Ok},
|
||||
};
|
||||
match parse_str::<Empty>("<foo xmlns='urn:example:ns1' xml:lang='bar'/>") {
|
||||
Ok(Empty) => (),
|
||||
other => panic!("unexpected result: {:?}", other),
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg_attr(
|
||||
feature = "disable-validation",
|
||||
|
|
|
|||
|
|
@ -396,7 +396,11 @@ impl Compound {
|
|||
}
|
||||
}
|
||||
|
||||
let mut discard_attr = TokenStream::default();
|
||||
// We always implicitly discard the `xml:lang` attribute. Its
|
||||
// processing is handled using the `#[xml(language)]` meta.
|
||||
let mut discard_attr = quote! {
|
||||
let _ = #attrs.remove(::xso::exports::rxml::Namespace::xml(), "lang");
|
||||
};
|
||||
for (xml_namespace, xml_name) in self.discard_attr.iter() {
|
||||
let xml_namespace = match xml_namespace {
|
||||
Some(v) => v.to_token_stream(),
|
||||
|
|
|
|||
|
|
@ -12,6 +12,11 @@ Version NEXT:
|
|||
|
||||
This change overall allows for more flexibility in the implementation
|
||||
of text codecs.
|
||||
- `xml:lang` attributes are now silently discarded during
|
||||
deserialisation unless captured by `#[xml(attribute = "xml:lang")]` or
|
||||
equivalent. This is because `xml:lang` is special as per
|
||||
XML 1.0 § 2.12 and it is generally preferable to allow it to occur
|
||||
anywhere in the document.
|
||||
* Added
|
||||
- Support for child elements in derive macros. Child elements may also
|
||||
be wrapped in Option or Box or in containers like Vec or HashSet.
|
||||
|
|
|
|||
Loading…
Reference in a new issue