bitbuffer 0.11.3

Reading bit sequences from a byte slice
Documentation
use bitbuffer::{BigEndian, BitWriteStream, Endianness, LittleEndian};
use iai_callgrind::{library_benchmark, library_benchmark_group, main};
use std::hint::black_box;

fn create_output<E: Endianness>(bit_size: usize, endianness: E) -> (E, Vec<u8>, usize) {
    (
        endianness,
        Vec::with_capacity(bit_size.next_power_of_two() / 8 * 128),
        bit_size,
    )
}

#[library_benchmark(setup = create_output)]
#[bench::le_small(7, LittleEndian)]
#[bench::be_small(7, BigEndian)]
#[bench::le_medium(15, LittleEndian)]
#[bench::be_medoim(15, BigEndian)]
#[bench::le_large(57, LittleEndian)]
#[bench::be_large(57, BigEndian)]
fn write_int_le<E: Endianness>((endianness, mut out, bit_size): (E, Vec<u8>, usize)) {
    {
        let mut write = BitWriteStream::new(&mut out, endianness);
        for i in 0..128 {
            write.write_sized(&black_box(i as u64), bit_size).unwrap();
        }
    }
    black_box(out);
}

library_benchmark_group!(
    name = bench_write_group;
    benchmarks = write_int_le
);

main!(library_benchmark_groups = bench_write_group);