binary_codec/bitstream/
mod.rs1pub mod reader;
2pub mod writer;
3
4pub trait CryptoStream {
6 fn apply_keystream_byte(&mut self, b: u8) -> u8;
8
9 fn apply_keystream(&mut self, slice: &[u8]) -> &[u8];
11
12 fn get_cached(&self, original: bool) -> &[u8];
15
16 fn replace(&mut self, other: &Box<dyn CryptoStream>);
18
19 fn set_cached(&mut self, data: &[u8]);
21}
22
23#[cfg(test)]
24mod tests {
25 use crate::bitstream::{reader::BitStreamReader, writer::BitStreamWriter};
26
27 #[test]
28 fn can_serialize_and_deserialize_using_bitstream() {
29 let mut buffer = Vec::new();
30 let mut writer = BitStreamWriter::new(&mut buffer);
31
32 writer.write_bit(true);
33 writer.write_bit(false);
34 writer.write_bit(true);
35 writer.write_byte(12);
36 writer.write_bytes(&[34, 56]);
37
38 assert_eq!(writer.byte_pos(), 4);
39
40 let mut reader = BitStreamReader::new(&buffer);
41 assert_eq!(reader.read_bit().unwrap(), true);
42 assert_eq!(reader.read_bit().unwrap(), false);
43 assert_eq!(reader.read_bit().unwrap(), true);
44 assert_eq!(reader.read_byte().unwrap(), 12);
45 assert_eq!(reader.read_byte().unwrap(), 34);
46 assert_eq!(reader.read_byte().unwrap(), 56);
47
48 assert_eq!(buffer, [0b00000101, 12, 34, 56]);
49 }
50}