Skip to main content

map_decoder

Function map_decoder 

Source
pub const fn map_decoder<K, V>(buf: &[u8]) -> MapDecoder<'_, K, V> 
where K: ?Sized, 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, decode_map, encoded_map_len, encode_map, map_decoder};
use std::collections::HashMap;

let values = (0..1024u64).map(|v| (v, v)).collect::<HashMap<_, _>>();

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

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

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

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