|
1 | 1 | use crate::{
|
2 |
| - binary_heap::Kind as BinaryHeapKind, BinaryHeap, IndexMap, IndexSet, LinearMap, String, Vec, |
| 2 | + binary_heap::Kind as BinaryHeapKind, BinaryHeap, Deque, IndexMap, IndexSet, LinearMap, String, Vec, |
3 | 3 | };
|
4 | 4 | use core::{
|
5 | 5 | fmt,
|
@@ -133,6 +133,45 @@ where
|
133 | 133 | }
|
134 | 134 | }
|
135 | 135 |
|
| 136 | +impl<'de, T, const N: usize> Deserialize<'de> for Deque<T, N> |
| 137 | +where |
| 138 | + T: Deserialize<'de>, |
| 139 | +{ |
| 140 | + fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> |
| 141 | + where |
| 142 | + D: Deserializer<'de>, |
| 143 | + { |
| 144 | + struct ValueVisitor<'de, T, const N: usize>(PhantomData<(&'de (), T)>); |
| 145 | + |
| 146 | + impl<'de, T, const N: usize> serde::de::Visitor<'de> for ValueVisitor<'de, T, N> |
| 147 | + where |
| 148 | + T: Deserialize<'de>, |
| 149 | + { |
| 150 | + type Value = Deque<T, N>; |
| 151 | + |
| 152 | + fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { |
| 153 | + formatter.write_str("a sequence") |
| 154 | + } |
| 155 | + |
| 156 | + fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error> |
| 157 | + where |
| 158 | + A: SeqAccess<'de>, |
| 159 | + { |
| 160 | + let mut values = Deque::new(); |
| 161 | + |
| 162 | + while let Some(value) = seq.next_element()? { |
| 163 | + if values.push_back(value).is_err() { |
| 164 | + return Err(A::Error::invalid_length(values.capacity() + 1, &self))?; |
| 165 | + } |
| 166 | + } |
| 167 | + |
| 168 | + Ok(values) |
| 169 | + } |
| 170 | + } |
| 171 | + deserializer.deserialize_seq(ValueVisitor(PhantomData)) |
| 172 | + } |
| 173 | +} |
| 174 | + |
136 | 175 | // Dictionaries
|
137 | 176 |
|
138 | 177 | impl<'de, K, V, S, const N: usize> Deserialize<'de> for IndexMap<K, V, BuildHasherDefault<S>, N>
|
|
0 commit comments