Skip to content

Commit 0a06966

Browse files
authored
Merge pull request rust-lang#87 from Mingun/into-deserializer
Implement IntoDeserializer for IndexMap/IndexSet
2 parents d8e5225 + 9807f52 commit 0a06966

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

README.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,8 @@ Recent Changes
116116
- Implemented ``Debug`` for ``map::{Entry, IntoIter, Iter, Keys, Values}`` and
117117
``set::{Difference, Intersection, IntoIter, Iter, SymmetricDifference, Union}``
118118

119+
- Serde trait ``IntoDeserializer`` are implemented for ``IndexMap`` and ``IndexSet``.
120+
119121
- 1.0.2
120122

121123
- The new methods ``IndexMap::insert_full`` and ``IndexSet::insert_full`` are

src/serde.rs

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
extern crate serde;
33

44
use self::serde::ser::{Serialize, Serializer, SerializeMap, SerializeSeq};
5-
use self::serde::de::{Deserialize, Deserializer, MapAccess, SeqAccess, Visitor};
5+
use self::serde::de::{Deserialize, Deserializer, Error, IntoDeserializer, MapAccess, SeqAccess, Visitor};
6+
use self::serde::de::value::{MapDeserializer, SeqDeserializer};
67

78
use std::fmt::{self, Formatter};
89
use std::hash::{BuildHasher, Hash};
@@ -66,6 +67,19 @@ impl<'de, K, V, S> Deserialize<'de> for IndexMap<K, V, S>
6667
}
6768
}
6869

70+
impl<'de, K, V, S, E> IntoDeserializer<'de, E> for IndexMap<K, V, S>
71+
where K: IntoDeserializer<'de, E> + Eq + Hash,
72+
V: IntoDeserializer<'de, E>,
73+
S: BuildHasher,
74+
E: Error,
75+
{
76+
type Deserializer = MapDeserializer<'de, <Self as IntoIterator>::IntoIter, E>;
77+
78+
fn into_deserializer(self) -> Self::Deserializer {
79+
MapDeserializer::new(self.into_iter())
80+
}
81+
}
82+
6983

7084
use IndexSet;
7185

@@ -121,3 +135,15 @@ impl<'de, T, S> Deserialize<'de> for IndexSet<T, S>
121135
deserializer.deserialize_seq(OrderSetVisitor(PhantomData))
122136
}
123137
}
138+
139+
impl<'de, T, S, E> IntoDeserializer<'de, E> for IndexSet<T, S>
140+
where T: IntoDeserializer<'de, E> + Eq + Hash,
141+
S: BuildHasher,
142+
E: Error,
143+
{
144+
type Deserializer = SeqDeserializer<<Self as IntoIterator>::IntoIter, E>;
145+
146+
fn into_deserializer(self) -> Self::Deserializer {
147+
SeqDeserializer::new(self.into_iter())
148+
}
149+
}

0 commit comments

Comments
 (0)