IteratorExtVarint

Trait IteratorExtVarint 

Source
pub trait IteratorExtVarint {
    // Required methods
    fn read_varint(self) -> Result<Option<Varint>>;
    fn read_varints(self) -> VarintIterator<ToResultIterator<Self>>
       where Self: Sized + Iterator<Item = u8>;
}
Expand description

Extension trait for collecting varints from byte iterators.

This trait provides convenient methods to collect varints directly from any iterator that yields bytes.

§Example

use ::protobuf_core::{IteratorExtVarint, Varint};

let bytes = vec![0x96, 0x01]; // 150 in varint encoding
let mut iter = bytes.into_iter();
let varint: Option<Varint> = iter.read_varint().unwrap();
assert_eq!(varint.unwrap().to_uint64(), 150);

Required Methods§

Source

fn read_varint(self) -> Result<Option<Varint>>

Read a varint from this iterator.

Returns the Varint Ok(Some(varint)) if successfully read. Returns Ok(None) if no input is available (empty iterator). Returns Err(ProtobufError::VarintTooLong) if the varint exceeds MAX_VARINT_BYTES.

Source

fn read_varints(self) -> VarintIterator<ToResultIterator<Self>>
where Self: Sized + Iterator<Item = u8>,

Create an iterator that reads multiple varints from this iterator.

Returns an iterator that yields Result<Varint> for each varint read. The iterator stops when there are no more bytes available or an error occurs.

§Example
use ::protobuf_core::{IteratorExtVarint, Varint};

let bytes = vec![0x96, 0x01, 0x7F]; // 150 and 127 in varint encoding
let iter = bytes.into_iter();
let varints: Vec<Varint> = iter.read_varints().collect::<Result<Vec<_>, _>>().unwrap();
assert_eq!(varints.len(), 2);
assert_eq!(varints[0].to_uint64(), 150);
assert_eq!(varints[1].to_uint64(), 127);

Implementors§

Source§

impl<I> IteratorExtVarint for I
where I: Iterator<Item = u8>,