Skip to content

Commit ff6153b

Browse files
committed
Implement IntoDeserializer for public deserializers
1 parent fd96a14 commit ff6153b

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

Changelog.md

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
- [#826]: Implement `From<String>` and `From<Cow<str>>` for `quick_xml::de::Text`.
1919
- [#826]: Make `SimpleTypeDeserializer` and `SimpleTypeSerializer` public.
20+
- [#826]: Implement `IntoDeserializer` for `&mut Deserializer`.
2021

2122
### Bug Fixes
2223

src/de/mod.rs

+16-1
Original file line numberDiff line numberDiff line change
@@ -2019,7 +2019,9 @@ use crate::{
20192019
reader::Reader,
20202020
utils::CowRef,
20212021
};
2022-
use serde::de::{self, Deserialize, DeserializeOwned, DeserializeSeed, SeqAccess, Visitor};
2022+
use serde::de::{
2023+
self, Deserialize, DeserializeOwned, DeserializeSeed, IntoDeserializer, SeqAccess, Visitor,
2024+
};
20232025
use std::borrow::Cow;
20242026
#[cfg(feature = "overlapped-lists")]
20252027
use std::collections::VecDeque;
@@ -2990,6 +2992,19 @@ where
29902992
}
29912993
}
29922994

2995+
impl<'de, 'a, R, E> IntoDeserializer<'de, DeError> for &'a mut Deserializer<'de, R, E>
2996+
where
2997+
R: XmlRead<'de>,
2998+
E: EntityResolver,
2999+
{
3000+
type Deserializer = Self;
3001+
3002+
#[inline]
3003+
fn into_deserializer(self) -> Self {
3004+
self
3005+
}
3006+
}
3007+
29933008
////////////////////////////////////////////////////////////////////////////////////////////////////
29943009

29953010
/// Helper struct that contains a state for an algorithm of converting events

src/de/simple_type.rs

+12-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ use crate::escape::unescape;
1010
use crate::utils::CowRef;
1111
use memchr::memchr;
1212
use serde::de::value::UnitDeserializer;
13-
use serde::de::{DeserializeSeed, Deserializer, EnumAccess, SeqAccess, VariantAccess, Visitor};
13+
use serde::de::{
14+
DeserializeSeed, Deserializer, EnumAccess, IntoDeserializer, SeqAccess, VariantAccess, Visitor,
15+
};
1416
use serde::serde_if_integer128;
1517
use std::borrow::Cow;
1618
use std::ops::Range;
@@ -770,6 +772,15 @@ impl<'de, 'a> EnumAccess<'de> for SimpleTypeDeserializer<'de, 'a> {
770772
}
771773
}
772774

775+
impl<'de, 'a> IntoDeserializer<'de, DeError> for SimpleTypeDeserializer<'de, 'a> {
776+
type Deserializer = Self;
777+
778+
#[inline]
779+
fn into_deserializer(self) -> Self {
780+
self
781+
}
782+
}
783+
773784
////////////////////////////////////////////////////////////////////////////////////////////////////
774785

775786
#[cfg(test)]

0 commit comments

Comments
 (0)