pub trait IteratorExtVarint {
// Required methods
fn read_varint(self) -> Result<Option<Varint>>;
fn read_varint_partial(self) -> Result<DecodeOutcome>;
fn read_varint_resume(self, state: DecodeState) -> Result<DecodeOutcome>;
fn read_varints(self) -> VarintIterator<ToResultIterator<Self>>
where Self: Sized + Iterator<Item = u8>;
}Expand description
This trait provides convenient methods to collect varints directly from any iterator that yields bytes.
§Example
use ::protobuf_core::{DecodeOutcome, IteratorExtVarint, Varint};
let bytes = vec![0x96, 0x01]; // 150 in varint encoding
let mut iter = bytes.into_iter();
let outcome = iter.read_varint_partial().unwrap();
let varint = match outcome {
DecodeOutcome::Complete(v) => v,
DecodeOutcome::Empty => panic!("expected varint"),
DecodeOutcome::Incomplete(_) => panic!("unexpected incomplete"),
};
assert_eq!(varint.to_uint64(), 150);Required Methods§
Sourcefn read_varint(self) -> Result<Option<Varint>>
fn read_varint(self) -> Result<Option<Varint>>
Read a varint from this iterator (consumes bytes from the iterator).
Returns Ok(Some(varint)) when a complete varint was read, Ok(None) when the input
is empty, and Err when the input is incomplete or invalid.
Sourcefn read_varint_partial(self) -> Result<DecodeOutcome>
fn read_varint_partial(self) -> Result<DecodeOutcome>
Read a varint from this iterator, supporting incomplete input.
Sourcefn read_varint_resume(self, state: DecodeState) -> Result<DecodeOutcome>
fn read_varint_resume(self, state: DecodeState) -> Result<DecodeOutcome>
Resume varint decoding with additional bytes from this iterator.
Use when a previous read_varint_partial returned
DecodeOutcome::Incomplete(state) and you have more bytes from another source.
Sourcefn read_varints(self) -> VarintIterator<ToResultIterator<Self>>
fn read_varints(self) -> VarintIterator<ToResultIterator<Self>>
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);