Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -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<R>`.

[#908]: https://github.com/tafia/quick-xml/pull/908
[#913]: https://github.com/tafia/quick-xml/pull/913


## 0.38.4 -- 2025-11-??
Expand Down
4 changes: 2 additions & 2 deletions src/de/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3469,7 +3469,7 @@ impl<'i, R: BufRead> XmlRead<'i> for IoReader<R> {
}

fn has_nil_attr(&self, start: &BytesStart) -> bool {
start.attributes().has_nil(&self.reader)
start.attributes().has_nil(self.reader.resolver())
}
}

Expand Down Expand Up @@ -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())
}
}

Expand Down
11 changes: 5 additions & 6 deletions src/events/attributes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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};
Expand Down Expand Up @@ -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),
/// );
/// };
Expand All @@ -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);
Expand All @@ -394,12 +393,12 @@ impl<'a> Attributes<'a> {
/// ```
///
/// [`xsi:nil`]: https://www.w3.org/TR/xmlschema-1/#xsi_nil
pub fn has_nil<R>(&mut self, reader: &NsReader<R>) -> 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"),
Expand Down
7 changes: 3 additions & 4 deletions src/name.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)]
Expand Down Expand Up @@ -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)_.
Expand Down
4 changes: 4 additions & 0 deletions src/reader/ns_reader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ impl<R> NsReader<R> {
/// # 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()
}
Expand Down Expand Up @@ -241,6 +242,7 @@ impl<R> NsReader<R> {
/// [`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>,
Expand Down Expand Up @@ -301,6 +303,7 @@ impl<R> NsReader<R> {
/// [`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)
}
Expand Down Expand Up @@ -371,6 +374,7 @@ impl<R> NsReader<R> {
/// [`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)
}
Expand Down