bitty/bits

Bit-level parsers for reading individual bits and sub-byte unsigned integers. Bits are read MSB-first within each byte. Use align() to return to byte-aligned parsing after bit-level operations.

Values

pub fn align() -> bitty.Parser(Nil)

Skip remaining bits in the current byte to reach the next byte boundary. If already aligned, this is a no-op. Use after bit-level parsing to resume byte-aligned operations.

use flag <- bitty.then(bits.bit())
use _ <- bitty.then(bits.align())
use value <- bitty.then(num.u8())
bitty.success(#(flag, value))
pub fn bit() -> bitty.Parser(Bool)

Parse a single bit as a Bool (True for 1, False for 0). Bits are read MSB-first within each byte.

let assert Ok(#(flag, _)) =
  bitty.run_partial(bits.bit(), on: <<0x80>>)
assert flag == True
pub fn uint(bits count: Int) -> bitty.Parser(Int)

Parse count bits as an unsigned integer. Does not require byte alignment — can start mid-byte. On the JavaScript target, values above 32 bits may lose precision due to IEEE 754 double-precision limitations.

let assert Ok(#(value, _)) =
  bitty.run_partial(bits.uint(bits: 4), on: <<0xAB>>)
assert value == 0x0A
Search Document