diff --git a/Changelog.md b/Changelog.md index 7c9cef04..8007b0c7 100644 --- a/Changelog.md +++ b/Changelog.md @@ -21,8 +21,12 @@ ### Misc Changes - [#908]: Increase minimal supported `serde` version from 1.0.139 to 1.0.180. +- [#913]: Deprecate `.prefixes()`, `.resolve()`, `.resolve_attribute()`, and `.resolve_element()` + of `NsReader`. Use `.resolver().bindings()` and `.resolver().resolve()` methods instead. +- [#913]: `Attributes::has_nil` now accepts `NamespaceResolver` instead of `Reader`. [#908]: https://github.com/tafia/quick-xml/pull/908 +[#913]: https://github.com/tafia/quick-xml/pull/913 ## 0.38.4 -- 2025-11-?? diff --git a/src/de/mod.rs b/src/de/mod.rs index a8a8282a..d2a8bf16 100644 --- a/src/de/mod.rs +++ b/src/de/mod.rs @@ -3469,7 +3469,7 @@ impl<'i, R: BufRead> XmlRead<'i> for IoReader { } fn has_nil_attr(&self, start: &BytesStart) -> bool { - start.attributes().has_nil(&self.reader) + start.attributes().has_nil(self.reader.resolver()) } } @@ -3537,7 +3537,7 @@ impl<'de> XmlRead<'de> for SliceReader<'de> { } fn has_nil_attr(&self, start: &BytesStart) -> bool { - start.attributes().has_nil(&self.reader) + start.attributes().has_nil(self.reader.resolver()) } } diff --git a/src/events/attributes.rs b/src/events/attributes.rs index 8e5b88bb..f0c73d2a 100644 --- a/src/events/attributes.rs +++ b/src/events/attributes.rs @@ -5,8 +5,7 @@ use crate::encoding::Decoder; use crate::errors::Result as XmlResult; use crate::escape::{escape, resolve_predefined_entity, unescape_with}; -use crate::name::{LocalName, Namespace, QName}; -use crate::reader::NsReader; +use crate::name::{LocalName, Namespace, NamespaceResolver, QName}; use crate::utils::{is_whitespace, Bytes}; use std::fmt::{self, Debug, Display, Formatter}; @@ -367,7 +366,7 @@ impl<'a> Attributes<'a> { /// e => panic!("Unexpected event {:?}", e), /// }; /// assert_eq!( - /// (event.name(), event.attributes().has_nil(&$reader)), + /// (event.name(), event.attributes().has_nil($reader.resolver())), /// (QName($name.as_bytes()), $value), /// ); /// }; @@ -377,7 +376,7 @@ impl<'a> Attributes<'a> { /// Event::Start(e) => e, /// e => panic!("Unexpected event {:?}", e), /// }; - /// assert_eq!(root.attributes().has_nil(&reader), false); + /// assert_eq!(root.attributes().has_nil(reader.resolver()), false); /// /// // definitely true /// check!(reader, "true", true); @@ -394,12 +393,12 @@ impl<'a> Attributes<'a> { /// ``` /// /// [`xsi:nil`]: https://www.w3.org/TR/xmlschema-1/#xsi_nil - pub fn has_nil(&mut self, reader: &NsReader) -> bool { + pub fn has_nil(&mut self, resolver: &NamespaceResolver) -> bool { use crate::name::ResolveResult::*; self.any(|attr| { if let Ok(attr) = attr { - match reader.resolver().resolve_attribute(attr.key) { + match resolver.resolve_attribute(attr.key) { ( Bound(Namespace(b"http://www.w3.org/2001/XMLSchema-instance")), LocalName(b"nil"), diff --git a/src/name.rs b/src/name.rs index a3d3f41a..09f675d2 100644 --- a/src/name.rs +++ b/src/name.rs @@ -365,13 +365,11 @@ impl<'a> AsRef<[u8]> for Namespace<'a> { //////////////////////////////////////////////////////////////////////////////////////////////////// -/// Result of [prefix] resolution which creates by [`NamespaceResolver::resolve`], [`NsReader::resolve_attribute`], -/// [`NsReader::resolve_element`], [`NsReader::read_resolved_event`] and +/// Result of [prefix] resolution which creates by [`NamespaceResolver::resolve`], +/// [`NsReader::read_resolved_event`] and /// [`NsReader::read_resolved_event_into`] methods. /// /// [prefix]: Prefix -/// [`NsReader::resolve_attribute`]: crate::reader::NsReader::resolve_attribute -/// [`NsReader::resolve_element`]: crate::reader::NsReader::resolve_element /// [`NsReader::read_resolved_event`]: crate::reader::NsReader::read_resolved_event /// [`NsReader::read_resolved_event_into`]: crate::reader::NsReader::read_resolved_event_into #[derive(Clone, PartialEq, Eq, Hash)] @@ -1084,6 +1082,7 @@ impl<'a> Iterator for NamespaceBindingsIter<'a> { impl<'a> FusedIterator for NamespaceBindingsIter<'a> {} /// The previous name for [`NamespaceBindingsIter`]. +#[deprecated = "Use NamespaceBindingsIter instead. This alias will be removed in 0.40.0"] pub type PrefixIter<'a> = NamespaceBindingsIter<'a>; /// Iterator on the declared namespace bindings on specified level. Returns pairs of the _(prefix, namespace)_. diff --git a/src/reader/ns_reader.rs b/src/reader/ns_reader.rs index 04991310..a3b33746 100644 --- a/src/reader/ns_reader.rs +++ b/src/reader/ns_reader.rs @@ -130,6 +130,7 @@ impl NsReader { /// # quick_xml::Result::Ok(()) /// ``` #[inline] + #[deprecated = "Use `.resolver().bindings()` instead. This method will be removed in 0.40.0"] pub const fn prefixes(&self) -> NamespaceBindingsIter<'_> { self.ns_resolver.bindings() } @@ -241,6 +242,7 @@ impl NsReader { /// [`resolve_attribute()`]: Self::resolve_attribute() /// [`resolve_element()`]: Self::resolve_element() #[inline] + #[deprecated = "Use `.resolver().resolve()` instead. Note, that boolean argument should be inverted! This method will be removed in 0.40.0"] pub fn resolve<'n>( &self, name: QName<'n>, @@ -301,6 +303,7 @@ impl NsReader { /// [`Unknown`]: ResolveResult::Unknown /// [`read_resolved_event()`]: Self::read_resolved_event #[inline] + #[deprecated = "Use `.resolver().resolve_element()` instead. This method will be removed in 0.40.0"] pub fn resolve_element<'n>(&self, name: QName<'n>) -> (ResolveResult<'_>, LocalName<'n>) { self.ns_resolver.resolve_element(name) } @@ -371,6 +374,7 @@ impl NsReader { /// [`Unbound`]: ResolveResult::Unbound /// [`Unknown`]: ResolveResult::Unknown #[inline] + #[deprecated = "Use `.resolver().resolve_attribute()` instead. This method will be removed in 0.40.0"] pub fn resolve_attribute<'n>(&self, name: QName<'n>) -> (ResolveResult<'_>, LocalName<'n>) { self.ns_resolver.resolve_attribute(name) }