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
20#[cfg(test)]
21mod tests {
22 use crate::bitstream::{reader::BitStreamReader, writer::BitStreamWriter};
23
24 #[test]
25 fn can_serialize_and_deserialize_using_bitstream() {
26 let mut buffer = Vec::new();
27 let mut writer = BitStreamWriter::new(&mut buffer);
28
29 writer.write_bit(true);
30 writer.write_bit(false);
31 writer.write_bit(true);
32 writer.write_byte(12);
33 writer.write_bytes(&[34, 56]);
34
35 assert_eq!(writer.byte_pos(), 4);
36
37 let mut reader = BitStreamReader::new(&buffer);
38 assert_eq!(reader.read_bit().unwrap(), true);
39 assert_eq!(reader.read_bit().unwrap(), false);
40 assert_eq!(reader.read_bit().unwrap(), true);
41 assert_eq!(reader.read_byte().unwrap(), 12);
42 assert_eq!(reader.read_byte().unwrap(), 34);
43 assert_eq!(reader.read_byte().unwrap(), 56);
44
45 assert_eq!(buffer, [0b00000101, 12, 34, 56]);
46 }
47}