yks_converter/
byte_buffer.rs1use byteorder::{BigEndian, WriteBytesExt};
2
3#[derive(Debug, Clone)]
4pub struct ByteBuffer {
5 buf: Vec<u8>,
6 read_pos: usize,
7}
8
9impl ByteBuffer {
10 pub fn new() -> Self {
11 ByteBuffer {
12 buf: Vec::new(),
13 read_pos: 0,
14 }
15 }
16
17
18 pub fn put_byte(&mut self, value: u8) -> &mut Self {
19 self.buf.push(value);
20 self
21 }
22
23 pub fn put_bytes(&mut self, other: &ByteBuffer) -> &mut Self {
24 self.buf.extend(&other.buf);
25 self
26 }
27
28 pub fn put_u16(&mut self, value: u16) -> &mut Self {
29 let mut temp = Vec::new();
30 temp.write_u16::<BigEndian>(value).unwrap();
31 self.buf.extend(temp);
32 self
33 }
34
35 pub fn put_u32(&mut self, value: u32) -> &mut Self {
36 let mut temp = Vec::new();
37 temp.write_u32::<BigEndian>(value).unwrap();
38 self.buf.extend(temp);
39 self
40 }
41
42 pub fn put_string(&mut self, value: &str) -> &mut Self {
43 self.buf.extend(value.bytes());
44 self
45 }
46
47 pub fn put_bytes_array(&mut self, bytes: &[u8]) -> &mut Self {
48 self.buf.extend(bytes);
49 self
50 }
51
52 pub fn get(&mut self) -> u8 {
53 if self.read_pos < self.buf.len() {
54 let value = self.buf[self.read_pos];
55 self.read_pos += 1;
56 value
57 } else {
58 0
59 }
60 }
61
62 pub fn get_at(&self, index: usize) -> u8 {
63 if index < self.buf.len() {
64 self.buf[index]
65 } else {
66 0
67 }
68 }
69
70 pub fn size(&self) -> usize {
71 self.buf.len()
72 }
73
74 pub fn clear(&mut self) {
75 self.buf.clear();
76 self.read_pos = 0;
77 }
78
79 pub fn print_hex(&self) {
80 println!("ByteBuffer Length: {}, Hex: ", self.buf.len());
81 for (i, byte) in self.buf.iter().enumerate() {
82 print!("{:02x} ", byte);
83 if (i + 1) % 16 == 0 {
84 println!();
85 }
86 }
87 println!();
88 }
89
90 pub fn as_slice(&self) -> &[u8] {
91 &self.buf
92 }
93
94 pub fn to_vec(&self) -> Vec<u8> {
95 self.buf.clone()
96 }
97}
98
99
100impl Default for ByteBuffer {
101 fn default() -> Self {
102 Self::new()
103 }
104}