1use super::{Decode, DecodeSliceBuilder, Decoder, SequenceDecoder};
2
3#[inline]
5pub fn default_decode_slice<'de, D, V, T>(decoder: D) -> Result<V, D::Error>
6where
7 D: Decoder<'de>,
8 V: DecodeSliceBuilder<T, D::Allocator>,
9 T: Decode<'de, D::Mode, D::Allocator>,
10{
11 use crate::Context;
12
13 let cx = decoder.cx();
14
15 decoder.decode_sequence(move |seq| {
16 let mut out = V::with_capacity(
17 cx,
18 crate::internal::size_hint::cautious::<T>(seq.size_hint()),
19 )?;
20 let mut index = 0usize;
21
22 while let Some(value) = seq.try_decode_next()? {
23 cx.enter_sequence_index(index);
24 let value = T::decode(value)?;
25 out.push(cx, value)?;
26 cx.leave_sequence_index();
27 index = index.wrapping_add(1);
28 }
29
30 Ok(out)
31 })
32}