use bitio_rs::byte_order::ByteOrder;
use bitio_rs::reader::BitReader;
use bitio_rs::traits::{BitRead, BitWrite};
use bitio_rs::writer::BitWriter;
use itertools::Itertools;
use std::io::{Cursor, Read, Result, Write};
fn main() -> Result<()> {
println!("--- Writing Demonstrations ---");
let mut buffer1 = Vec::new();
{
let mut bit_writer = BitWriter::new(Cursor::new(&mut buffer1));
bit_writer.write_bits(0b101, 3)?;
bit_writer.write_bits(0b1010101111001101, 16)?; bit_writer.flush()?;
}
println!(
"Demo1: {}",
buffer1
.iter()
.format_with(" ", |b, f| f(&format_args!("{:08b}", b)))
);
let mut buffer2 = Vec::new();
{
let mut bit_writer = BitWriter::new(Cursor::new(&mut buffer2));
bit_writer.write(&[0b00010001, 0b00100010])?; bit_writer.write_bits(0b11011, 5)?;
bit_writer.write(&[0b00110011])?; }
println!(
"\nDemo2: {}",
buffer2
.iter()
.format_with(" ", |b, f| f(&format_args!("{:08b}", b)))
);
println!("\n--- Reading Demonstrations ---");
let read_data = vec![0b10101010, 0b10111011, 0b11001100];
let mut bit_reader = BitReader::with_byte_order(ByteOrder::BigEndian, Cursor::new(&read_data));
let bits3 = bit_reader.read_bits(3)?; let bits8 = bit_reader.read_bits(8)?; println!("Read 3+8 bits: {:03b} {:08b}", bits3, bits8);
let mut buf = [0u8; 2];
let bytes_read = bit_reader.read(&mut buf)?;
println!(
"Subsequent bytes: {}",
&buf[..bytes_read]
.iter()
.map(|b| format!("{:08b}", b))
.collect::<Vec<String>>()
.join(" ")
);
let mut error_reader = BitReader::new(Cursor::new(&[0b10101010]));
error_reader.read_bits(1)?;
match error_reader.read(&mut [0u8; 1]) {
Ok(_) => println!("Error: Misaligned read succeeded unexpectedly"),
Err(e) => println!("Expected error: {}", e),
}
Ok(())
}