[][src]Crate wasabi_leb128

Read and write the variable length LEB128 number format.

LEB128 ("Little Endian Base 128") is used, for example in DWARF debugging information (see Appenix 4 for C pseudo code) and in the WebAssembly binary format.

Example

use wasabi_leb128::{ReadLeb128, WriteLeb128};

// Vec<u8> as byte-oriented reader/writer.
let mut buf = Vec::new();

// Encoding/writing a u16 as an LEB128 byte sequence.
let original_value: u16 = 128;
buf.write_leb128(original_value).unwrap();
assert_eq!(buf, [0x80, 0x01]);

// Decoding/reading an LEB128 number back to a u16.
let (value, bytes_read): (u16, usize) = buf.as_slice().read_leb128().unwrap();
assert_eq!(value, original_value);

See ReadLeb128 and WriteLeb128 traits for more information.

Related Work

Other open-source implementations of LEB128 numbers:

Differences between this crate and existing Rust implementations in parity-wasm and leb128:

  • Available for all primitive integers (not just u64 or i64).
  • A single, combined implementation for signed/unsigned and all sizes (thanks to num_traits).
  • Proper overflow checking for all target types when parsing.
  • (Hopefully:) easy to understand, comments and explanations inline.

Enums

ParseLeb128Error

Errors while parsing an LEB128 value from an io::Read reader.

Traits

ReadLeb128

A trait that extends readers (implementers of the io::Read trait) with a method to parse LEB128 encoded primitive integers.

WriteLeb128

A trait that extends writers (implementers of the io::Write trait) with a method to write LEB128 encodings of primitive integers.

Functions

max_bytes

Maximum number of bytes that the LEB128 encoding of values of type T can take.