Skip to main content

TryIteratorExtVarint

Trait TryIteratorExtVarint 

Source
pub trait TryIteratorExtVarint {
    // 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<Self>
       where Self: Sized + Iterator;
}
Expand description

Extension trait for reading varints from byte iterators that yield Result<u8, E>.

This trait provides convenient methods to read varints directly from any iterator that yields Result<u8, E>, allowing proper error propagation. The error type E must implement Into<ProtobufError>.

§Example

use ::std::io::{Cursor, Read};
use ::protobuf_core::{DecodeOutcome, TryIteratorExtVarint, Varint};

let data = vec![0x96, 0x01]; // 150 in varint encoding
let mut reader = Cursor::new(data);
let iter = reader.bytes(); // Iterator<Item = Result<u8, io::Error>>
let outcome = iter.read_varint_partial().unwrap();
let varint = match outcome {
    DecodeOutcome::Complete(v) => v,
    _ => panic!("expected complete"),
};
assert_eq!(varint.to_uint64(), 150);

Required Methods§

Source

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.

Source

fn read_varint_partial(self) -> Result<DecodeOutcome>

Read a varint from this iterator, supporting incomplete input.

Source

fn read_varint_resume(self, state: DecodeState) -> Result<DecodeOutcome>

Resume varint decoding with additional bytes from this iterator.

Source

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

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 ::std::io::{Cursor, Read};
use ::protobuf_core::{TryIteratorExtVarint, Varint};

let data = vec![0x96, 0x01, 0x7F]; // 150 and 127 in varint encoding
let reader = Cursor::new(data);
let iter = reader.bytes();
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, E> TryIteratorExtVarint for I
where I: Iterator<Item = Result<u8, E>>, E: Into<ProtobufError>,