| 253 | } |
| 254 | |
| 255 | fn deserialize_seq<V>(mut self, v: V) -> Result<V::Value> |
| 256 | where |
| 257 | V: Visitor<'de>, |
| 258 | { |
| 259 | let (length_decoder, decoder) = specify!(self, Seq); |
| 260 | let len = length_decoder.decode(); |
| 261 | |
| 262 | struct Access<'a, 'de> { |
| 263 | wrapper: DecoderWrapper<'a, 'de>, |
| 264 | len: usize, |
| 265 | } |
| 266 | impl<'de> SeqAccess<'de> for Access<'_, 'de> { |
| 267 | type Error = Error; |
| 268 | |
| 269 | #[inline(always)] |
| 270 | fn next_element_seed<T>(&mut self, seed: T) -> Result<Option<T::Value>> |
| 271 | where |
| 272 | T: DeserializeSeed<'de>, |
| 273 | { |
| 274 | guard_zst::<T::Value>(self.len)?; |
| 275 | if self.len != 0 { |
| 276 | self.len -= 1; |
| 277 | Ok(Some(DeserializeSeed::deserialize( |
| 278 | seed, |
| 279 | DecoderWrapper { |
| 280 | decoder: &mut *self.wrapper.decoder, |
| 281 | input: &mut *self.wrapper.input, |
| 282 | }, |
| 283 | )?)) |
| 284 | } else { |
| 285 | Ok(None) |
| 286 | } |
| 287 | } |
| 288 | |
| 289 | #[inline(always)] |
| 290 | fn size_hint(&self) -> Option<usize> { |
| 291 | Some(self.len) |
| 292 | } |
| 293 | } |
| 294 | v.visit_seq(Access { |
| 295 | wrapper: DecoderWrapper { |
| 296 | decoder, |
| 297 | input: self.input, |
| 298 | }, |
| 299 | len, |
| 300 | }) |
| 301 | } |
| 302 | |
| 303 | #[inline(always)] |
| 304 | fn deserialize_tuple<V>(mut self, tuple_len: usize, v: V) -> Result<V::Value> |