Skip to main content

sequence_decoder

Function sequence_decoder 

Source
pub const fn sequence_decoder<V>(buf: &[u8]) -> SequenceDecoder<'_, V> 
where V: ?Sized,
Expand description

Returns a sequence decoder for the given buffer.

The returned decoder is an iterator that yields Result<(usize, Self), ConstDecodeError>.

§Example

use varing::{Varint, encoded_sequence_len, encode_sequence, sequence_decoder};

let values = (0..1024u64).collect::<Vec<_>>();

let encoded_len = encoded_sequence_len(values.iter());
let mut buf = vec![0; encoded_len];

let bytes_written = encode_sequence(values.iter(), &mut buf).unwrap();
assert_eq!(bytes_written, encoded_len);

let mut readed = 0;
let mut decoded = Vec::new();
let mut decoder = sequence_decoder::<u64>(&buf[readed..]);
// `SequenceDecoder` is copy
let mut decoder1 = decoder;
while let Some(Ok((bytes_read, value))) = decoder.next() {
  readed += bytes_read.get();
  assert_eq!(readed, decoder.position());
  decoded.push(value);
}

assert_eq!(decoder1.position(), 0);
assert_eq!(decoded, values);
assert_eq!(readed, buf.len());