|
2 | 2 | extern crate serde;
|
3 | 3 |
|
4 | 4 | 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}; |
6 | 7 |
|
7 | 8 | use std::fmt::{self, Formatter};
|
8 | 9 | use std::hash::{BuildHasher, Hash};
|
@@ -66,6 +67,19 @@ impl<'de, K, V, S> Deserialize<'de> for IndexMap<K, V, S>
|
66 | 67 | }
|
67 | 68 | }
|
68 | 69 |
|
| 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 | + |
69 | 83 |
|
70 | 84 | use IndexSet;
|
71 | 85 |
|
@@ -121,3 +135,15 @@ impl<'de, T, S> Deserialize<'de> for IndexSet<T, S>
|
121 | 135 | deserializer.deserialize_seq(OrderSetVisitor(PhantomData))
|
122 | 136 | }
|
123 | 137 | }
|
| 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