binary_codec/bitstream/
mod.rs

1pub mod reader;
2pub mod writer;
3
4pub trait CryptoStream {
5    fn apply_keystream_byte(&mut self, b: u8) -> u8;
6    fn apply_keystream(&mut self, slice: &[u8]) -> &[u8];
7}
8
9#[cfg(test)]
10mod tests {
11    use crate::bitstream::{reader::BitStreamReader, writer::BitStreamWriter};
12
13    #[test]
14    fn can_serialize_and_deserialize_using_bitstream() {
15        let mut buffer = Vec::new();
16        let mut writer = BitStreamWriter::new(&mut buffer);
17
18        writer.write_bit(true);
19        writer.write_bit(false);
20        writer.write_bit(true);
21        writer.write_byte(12);
22        writer.write_bytes(&[34, 56]);
23
24        assert_eq!(writer.byte_pos(), 4);
25
26        let mut reader = BitStreamReader::new(&buffer);
27        assert_eq!(reader.read_bit().unwrap(), true);
28        assert_eq!(reader.read_bit().unwrap(), false);
29        assert_eq!(reader.read_bit().unwrap(), true);
30        assert_eq!(reader.read_byte().unwrap(), 12);
31        assert_eq!(reader.read_byte().unwrap(), 34);
32        assert_eq!(reader.read_byte().unwrap(), 56);
33
34        assert_eq!(buffer, [0b00000101, 12, 34, 56]);
35    }
36}