musli_core/de/
utils.rs

1use super::{Decode, DecodeSliceBuilder, Decoder, SequenceDecoder};
2
3/// Default implementation to decode a slice.
4#[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}