diff --git a/src/de/key.rs b/src/de/key.rs index 0c003730..d51f129a 100644 --- a/src/de/key.rs +++ b/src/de/key.rs @@ -23,7 +23,7 @@ macro_rules! deserialize_num { /// The method will borrow if encoding is UTF-8 compatible and `name` contains /// only UTF-8 compatible characters (usually only ASCII characters). #[inline] -fn decode_name<'n>(name: QName<'n>, decoder: Decoder) -> Result, DeError> { +pub(super) fn decode_name<'n>(name: QName<'n>, decoder: Decoder) -> Result, DeError> { let local = name.local_name(); Ok(decoder.decode(local.into_inner())?) } diff --git a/src/de/map.rs b/src/de/map.rs index 64ae6a68..05c0b45f 100644 --- a/src/de/map.rs +++ b/src/de/map.rs @@ -789,7 +789,7 @@ fn not_in( start: &BytesStart, decoder: Decoder, ) -> Result { - let tag = decoder.decode(start.name().into_inner())?; + let tag = super::key::decode_name(start.name(), decoder)?; Ok(fields.iter().all(|&field| field != tag.as_ref())) } @@ -1192,4 +1192,18 @@ fn test_not_in() { not_in(&["some", "tag", "included"], &tag, Decoder::utf8()).unwrap(), false ); + + let tag_ns = BytesStart::new("ns1:tag"); + assert_eq!( + not_in(&["no", "such", "tags"], &tag_ns, Decoder::utf8()).unwrap(), + true + ); + assert_eq!( + not_in(&["some", "tag", "included"], &tag_ns, Decoder::utf8()).unwrap(), + false + ); + assert_eq!( + not_in(&["some", "namespace", "ns1:tag"], &tag_ns, Decoder::utf8()).unwrap(), + true + ); }