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(cx, crate::internal::size_hint::cautious(seq.size_hint()))?;
17        let mut index = 0usize;
18
19        while let Some(value) = seq.try_decode_next()? {
20            cx.enter_sequence_index(index);
21            let value = T::decode(value)?;
22            out.push(cx, value)?;
23            cx.leave_sequence_index();
24            index = index.wrapping_add(1);
25        }
26
27        Ok(out)
28    })
29}