Skip to content

Commit 9abc2ad

Browse files
committed
Implement IntoDeserializer for all Deserializers in serde::de::value module
Unfortunately, blanket implementation IntoDeserializer for Deserializer is impossible right now because this would be a breaking change. External crates may have this such implementation (and serde_json actually have it for Value)
1 parent 28a0922 commit 9abc2ad

File tree

1 file changed

+174
-0
lines changed

1 file changed

+174
-0
lines changed

serde/src/de/value.rs

+174
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,17 @@ where
175175
}
176176
}
177177

178+
impl<'de, E> IntoDeserializer<'de, E> for UnitDeserializer<E>
179+
where
180+
E: de::Error,
181+
{
182+
type Deserializer = Self;
183+
184+
fn into_deserializer(self) -> Self {
185+
self
186+
}
187+
}
188+
178189
impl<E> Debug for UnitDeserializer<E> {
179190
fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
180191
formatter.debug_struct("UnitDeserializer").finish()
@@ -225,6 +236,18 @@ where
225236
}
226237
}
227238

239+
#[cfg(feature = "unstable")]
240+
impl<'de, E> IntoDeserializer<'de, E> for NeverDeserializer<E>
241+
where
242+
E: de::Error,
243+
{
244+
type Deserializer = Self;
245+
246+
fn into_deserializer(self) -> Self {
247+
self
248+
}
249+
}
250+
228251
////////////////////////////////////////////////////////////////////////////////
229252

230253
macro_rules! primitive_deserializer {
@@ -279,6 +302,17 @@ macro_rules! primitive_deserializer {
279302
}
280303
}
281304

305+
impl<'de, E> IntoDeserializer<'de, E> for $name<E>
306+
where
307+
E: de::Error,
308+
{
309+
type Deserializer = Self;
310+
311+
fn into_deserializer(self) -> Self {
312+
self
313+
}
314+
}
315+
282316
impl<E> Debug for $name<E> {
283317
fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
284318
formatter
@@ -369,6 +403,17 @@ where
369403
}
370404
}
371405

406+
impl<'de, E> IntoDeserializer<'de, E> for U32Deserializer<E>
407+
where
408+
E: de::Error,
409+
{
410+
type Deserializer = Self;
411+
412+
fn into_deserializer(self) -> Self {
413+
self
414+
}
415+
}
416+
372417
impl<'de, E> de::EnumAccess<'de> for U32Deserializer<E>
373418
where
374419
E: de::Error,
@@ -458,6 +503,17 @@ where
458503
}
459504
}
460505

506+
impl<'de, 'a, E> IntoDeserializer<'de, E> for StrDeserializer<'a, E>
507+
where
508+
E: de::Error,
509+
{
510+
type Deserializer = Self;
511+
512+
fn into_deserializer(self) -> Self {
513+
self
514+
}
515+
}
516+
461517
impl<'de, 'a, E> de::EnumAccess<'de> for StrDeserializer<'a, E>
462518
where
463519
E: de::Error,
@@ -537,6 +593,17 @@ where
537593
}
538594
}
539595

596+
impl<'de, E> IntoDeserializer<'de, E> for BorrowedStrDeserializer<'de, E>
597+
where
598+
E: de::Error,
599+
{
600+
type Deserializer = Self;
601+
602+
fn into_deserializer(self) -> Self {
603+
self
604+
}
605+
}
606+
540607
impl<'de, E> de::EnumAccess<'de> for BorrowedStrDeserializer<'de, E>
541608
where
542609
E: de::Error,
@@ -640,6 +707,18 @@ where
640707
}
641708
}
642709

710+
#[cfg(any(feature = "std", feature = "alloc"))]
711+
impl<'de, E> IntoDeserializer<'de, E> for StringDeserializer<E>
712+
where
713+
E: de::Error,
714+
{
715+
type Deserializer = Self;
716+
717+
fn into_deserializer(self) -> Self {
718+
self
719+
}
720+
}
721+
643722
#[cfg(any(feature = "std", feature = "alloc"))]
644723
impl<'de, E> de::EnumAccess<'de> for StringDeserializer<E>
645724
where
@@ -748,6 +827,18 @@ where
748827
}
749828
}
750829

830+
#[cfg(any(feature = "std", feature = "alloc"))]
831+
impl<'de, 'a, E> IntoDeserializer<'de, E> for CowStrDeserializer<'a, E>
832+
where
833+
E: de::Error,
834+
{
835+
type Deserializer = Self;
836+
837+
fn into_deserializer(self) -> Self {
838+
self
839+
}
840+
}
841+
751842
#[cfg(any(feature = "std", feature = "alloc"))]
752843
impl<'de, 'a, E> de::EnumAccess<'de> for CowStrDeserializer<'a, E>
753844
where
@@ -825,6 +916,17 @@ where
825916
}
826917
}
827918

919+
impl<'de, 'a, E> IntoDeserializer<'de, E> for BytesDeserializer<'a, E>
920+
where
921+
E: de::Error,
922+
{
923+
type Deserializer = Self;
924+
925+
fn into_deserializer(self) -> Self {
926+
self
927+
}
928+
}
929+
828930
impl<'a, E> Debug for BytesDeserializer<'a, E> {
829931
fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
830932
formatter
@@ -873,6 +975,17 @@ where
873975
}
874976
}
875977

978+
impl<'de, E> IntoDeserializer<'de, E> for BorrowedBytesDeserializer<'de, E>
979+
where
980+
E: de::Error,
981+
{
982+
type Deserializer = Self;
983+
984+
fn into_deserializer(self) -> Self {
985+
self
986+
}
987+
}
988+
876989
impl<'de, E> Debug for BorrowedBytesDeserializer<'de, E> {
877990
fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
878991
formatter
@@ -952,6 +1065,19 @@ where
9521065
}
9531066
}
9541067

1068+
impl<'de, I, T, E> IntoDeserializer<'de, E> for SeqDeserializer<I, E>
1069+
where
1070+
I: Iterator<Item = T>,
1071+
T: IntoDeserializer<'de, E>,
1072+
E: de::Error,
1073+
{
1074+
type Deserializer = Self;
1075+
1076+
fn into_deserializer(self) -> Self {
1077+
self
1078+
}
1079+
}
1080+
9551081
impl<'de, I, T, E> de::SeqAccess<'de> for SeqDeserializer<I, E>
9561082
where
9571083
I: Iterator<Item = T>,
@@ -1083,6 +1209,17 @@ where
10831209
}
10841210
}
10851211

1212+
impl<'de, A> IntoDeserializer<'de, A::Error> for SeqAccessDeserializer<A>
1213+
where
1214+
A: de::SeqAccess<'de>,
1215+
{
1216+
type Deserializer = Self;
1217+
1218+
fn into_deserializer(self) -> Self {
1219+
self
1220+
}
1221+
}
1222+
10861223
////////////////////////////////////////////////////////////////////////////////
10871224

10881225
/// A deserializer that iterates over a map.
@@ -1197,6 +1334,21 @@ where
11971334
}
11981335
}
11991336

1337+
impl<'de, I, E> IntoDeserializer<'de, E> for MapDeserializer<'de, I, E>
1338+
where
1339+
I: Iterator,
1340+
I::Item: private::Pair,
1341+
First<I::Item>: IntoDeserializer<'de, E>,
1342+
Second<I::Item>: IntoDeserializer<'de, E>,
1343+
E: de::Error,
1344+
{
1345+
type Deserializer = Self;
1346+
1347+
fn into_deserializer(self) -> Self {
1348+
self
1349+
}
1350+
}
1351+
12001352
impl<'de, I, E> de::MapAccess<'de> for MapDeserializer<'de, I, E>
12011353
where
12021354
I: Iterator,
@@ -1498,6 +1650,17 @@ where
14981650
}
14991651
}
15001652

1653+
impl<'de, A> IntoDeserializer<'de, A::Error> for MapAccessDeserializer<A>
1654+
where
1655+
A: de::MapAccess<'de>,
1656+
{
1657+
type Deserializer = Self;
1658+
1659+
fn into_deserializer(self) -> Self {
1660+
self
1661+
}
1662+
}
1663+
15011664
impl<'de, A> de::EnumAccess<'de> for MapAccessDeserializer<A>
15021665
where
15031666
A: de::MapAccess<'de>,
@@ -1551,6 +1714,17 @@ where
15511714
}
15521715
}
15531716

1717+
impl<'de, A> IntoDeserializer<'de, A::Error> for EnumAccessDeserializer<A>
1718+
where
1719+
A: de::EnumAccess<'de>,
1720+
{
1721+
type Deserializer = Self;
1722+
1723+
fn into_deserializer(self) -> Self {
1724+
self
1725+
}
1726+
}
1727+
15541728
////////////////////////////////////////////////////////////////////////////////
15551729

15561730
mod private {

0 commit comments

Comments
 (0)