Skip to content

Commit 439047e

Browse files
authored
Merge pull request #913 from Mingun/deprecation
Improve API of `Attributes::has_nil` and deprecate some methods for namespace resolution
2 parents 3b7e6db + d988704 commit 439047e

File tree

5 files changed

+18
-12
lines changed

5 files changed

+18
-12
lines changed

Changelog.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,12 @@
2121
### Misc Changes
2222

2323
- [#908]: Increase minimal supported `serde` version from 1.0.139 to 1.0.180.
24+
- [#913]: Deprecate `.prefixes()`, `.resolve()`, `.resolve_attribute()`, and `.resolve_element()`
25+
of `NsReader`. Use `.resolver().bindings()` and `.resolver().resolve()` methods instead.
26+
- [#913]: `Attributes::has_nil` now accepts `NamespaceResolver` instead of `Reader<R>`.
2427

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

2731

2832
## 0.38.4 -- 2025-11-??

src/de/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3469,7 +3469,7 @@ impl<'i, R: BufRead> XmlRead<'i> for IoReader<R> {
34693469
}
34703470

34713471
fn has_nil_attr(&self, start: &BytesStart) -> bool {
3472-
start.attributes().has_nil(&self.reader)
3472+
start.attributes().has_nil(self.reader.resolver())
34733473
}
34743474
}
34753475

@@ -3537,7 +3537,7 @@ impl<'de> XmlRead<'de> for SliceReader<'de> {
35373537
}
35383538

35393539
fn has_nil_attr(&self, start: &BytesStart) -> bool {
3540-
start.attributes().has_nil(&self.reader)
3540+
start.attributes().has_nil(self.reader.resolver())
35413541
}
35423542
}
35433543

src/events/attributes.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55
use crate::encoding::Decoder;
66
use crate::errors::Result as XmlResult;
77
use crate::escape::{escape, resolve_predefined_entity, unescape_with};
8-
use crate::name::{LocalName, Namespace, QName};
9-
use crate::reader::NsReader;
8+
use crate::name::{LocalName, Namespace, NamespaceResolver, QName};
109
use crate::utils::{is_whitespace, Bytes};
1110

1211
use std::fmt::{self, Debug, Display, Formatter};
@@ -367,7 +366,7 @@ impl<'a> Attributes<'a> {
367366
/// e => panic!("Unexpected event {:?}", e),
368367
/// };
369368
/// assert_eq!(
370-
/// (event.name(), event.attributes().has_nil(&$reader)),
369+
/// (event.name(), event.attributes().has_nil($reader.resolver())),
371370
/// (QName($name.as_bytes()), $value),
372371
/// );
373372
/// };
@@ -377,7 +376,7 @@ impl<'a> Attributes<'a> {
377376
/// Event::Start(e) => e,
378377
/// e => panic!("Unexpected event {:?}", e),
379378
/// };
380-
/// assert_eq!(root.attributes().has_nil(&reader), false);
379+
/// assert_eq!(root.attributes().has_nil(reader.resolver()), false);
381380
///
382381
/// // definitely true
383382
/// check!(reader, "true", true);
@@ -394,12 +393,12 @@ impl<'a> Attributes<'a> {
394393
/// ```
395394
///
396395
/// [`xsi:nil`]: https://www.w3.org/TR/xmlschema-1/#xsi_nil
397-
pub fn has_nil<R>(&mut self, reader: &NsReader<R>) -> bool {
396+
pub fn has_nil(&mut self, resolver: &NamespaceResolver) -> bool {
398397
use crate::name::ResolveResult::*;
399398

400399
self.any(|attr| {
401400
if let Ok(attr) = attr {
402-
match reader.resolver().resolve_attribute(attr.key) {
401+
match resolver.resolve_attribute(attr.key) {
403402
(
404403
Bound(Namespace(b"http://www.w3.org/2001/XMLSchema-instance")),
405404
LocalName(b"nil"),

src/name.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -365,13 +365,11 @@ impl<'a> AsRef<[u8]> for Namespace<'a> {
365365

366366
////////////////////////////////////////////////////////////////////////////////////////////////////
367367

368-
/// Result of [prefix] resolution which creates by [`NamespaceResolver::resolve`], [`NsReader::resolve_attribute`],
369-
/// [`NsReader::resolve_element`], [`NsReader::read_resolved_event`] and
368+
/// Result of [prefix] resolution which creates by [`NamespaceResolver::resolve`],
369+
/// [`NsReader::read_resolved_event`] and
370370
/// [`NsReader::read_resolved_event_into`] methods.
371371
///
372372
/// [prefix]: Prefix
373-
/// [`NsReader::resolve_attribute`]: crate::reader::NsReader::resolve_attribute
374-
/// [`NsReader::resolve_element`]: crate::reader::NsReader::resolve_element
375373
/// [`NsReader::read_resolved_event`]: crate::reader::NsReader::read_resolved_event
376374
/// [`NsReader::read_resolved_event_into`]: crate::reader::NsReader::read_resolved_event_into
377375
#[derive(Clone, PartialEq, Eq, Hash)]
@@ -1084,6 +1082,7 @@ impl<'a> Iterator for NamespaceBindingsIter<'a> {
10841082
impl<'a> FusedIterator for NamespaceBindingsIter<'a> {}
10851083

10861084
/// The previous name for [`NamespaceBindingsIter`].
1085+
#[deprecated = "Use NamespaceBindingsIter instead. This alias will be removed in 0.40.0"]
10871086
pub type PrefixIter<'a> = NamespaceBindingsIter<'a>;
10881087

10891088
/// Iterator on the declared namespace bindings on specified level. Returns pairs of the _(prefix, namespace)_.

src/reader/ns_reader.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ impl<R> NsReader<R> {
130130
/// # quick_xml::Result::Ok(())
131131
/// ```
132132
#[inline]
133+
#[deprecated = "Use `.resolver().bindings()` instead. This method will be removed in 0.40.0"]
133134
pub const fn prefixes(&self) -> NamespaceBindingsIter<'_> {
134135
self.ns_resolver.bindings()
135136
}
@@ -241,6 +242,7 @@ impl<R> NsReader<R> {
241242
/// [`resolve_attribute()`]: Self::resolve_attribute()
242243
/// [`resolve_element()`]: Self::resolve_element()
243244
#[inline]
245+
#[deprecated = "Use `.resolver().resolve()` instead. Note, that boolean argument should be inverted! This method will be removed in 0.40.0"]
244246
pub fn resolve<'n>(
245247
&self,
246248
name: QName<'n>,
@@ -301,6 +303,7 @@ impl<R> NsReader<R> {
301303
/// [`Unknown`]: ResolveResult::Unknown
302304
/// [`read_resolved_event()`]: Self::read_resolved_event
303305
#[inline]
306+
#[deprecated = "Use `.resolver().resolve_element()` instead. This method will be removed in 0.40.0"]
304307
pub fn resolve_element<'n>(&self, name: QName<'n>) -> (ResolveResult<'_>, LocalName<'n>) {
305308
self.ns_resolver.resolve_element(name)
306309
}
@@ -371,6 +374,7 @@ impl<R> NsReader<R> {
371374
/// [`Unbound`]: ResolveResult::Unbound
372375
/// [`Unknown`]: ResolveResult::Unknown
373376
#[inline]
377+
#[deprecated = "Use `.resolver().resolve_attribute()` instead. This method will be removed in 0.40.0"]
374378
pub fn resolve_attribute<'n>(&self, name: QName<'n>) -> (ResolveResult<'_>, LocalName<'n>) {
375379
self.ns_resolver.resolve_attribute(name)
376380
}

0 commit comments

Comments
 (0)