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