pub trait VLQDecode<T> {
    fn read_vlq(&mut self) -> Result<T>;
}

Required Methods§

Read a VLQ byte array from stream and decode it to an integer.

Examples
use vlqencoding::VLQDecode;
use std::io::{Cursor,Seek,SeekFrom,ErrorKind};

let mut c = Cursor::new(vec![120u8, 211, 171, 202, 220, 84]);

let x: Result<u8, _> = c.read_vlq();
assert_eq!(x.unwrap(), 120u8);

let x: Result<u16, _> = c.read_vlq();
assert_eq!(x.unwrap_err().kind(), ErrorKind::InvalidData);

c.seek(SeekFrom::Start(1)).expect("seek should work");
let x: Result<u64, _> = c.read_vlq();
assert_eq!(x.unwrap(), 22742734291u64);

Signed integers are decoded via zig-zag:

use vlqencoding::VLQDecode;
use std::io::{Cursor,Seek,SeekFrom,ErrorKind};

let mut c = Cursor::new(vec![5u8, 208, 15]);

let x: Result<i8, _> = c.read_vlq();
assert_eq!(x.unwrap(), -3i8);

let x: Result<i8, _> = c.read_vlq();
assert_eq!(x.unwrap_err().kind(), ErrorKind::InvalidData);

c.seek(SeekFrom::Start(1)).expect("seek should work");
let x: Result<i32, _> = c.read_vlq();
assert_eq!(x.unwrap(), 1000i32);

Implementors§