Expand description
Variable-length integer encoding and decoding
§Overview
This module implements Google’s Protocol Buffers variable-length integer encoding. Each byte uses:
- 7 bits for the value
- 1 “continuation” bit to indicate if more bytes follow
u8 and i8 are omitted since those types do not benefit from varint encoding.
usize and isize are omitted to prevent behavior from depending on the target architecture.
§Usage Example
use commonware_codec::{Encode, DecodeExt, varint::{UInt, SInt}};
// Unsigned example
let one = UInt(42u128).encode();
assert_eq!(one.len(), 1); // 42 fits in a single byte
let decoded: u128 = UInt::decode(one).unwrap().into();
assert_eq!(decoded, 42);
// Signed example (ZigZag)
let neg = SInt(-3i32).encode();
assert_eq!(neg.len(), 1);
let decoded: i32 = SInt::decode(neg).unwrap().into();
assert_eq!(decoded, -3);