1use crate::DataType;
12
13pub struct Reply {
15 length: u16,
16 id: u16,
17 error: bool,
18 memory: Vec<u8>
19}
20
21impl Reply {
22 pub fn parse(packet: &[u8]) -> Self {
24 let len = u16::from_le_bytes([packet[0], packet[1]]);
25 let rid = u16::from_le_bytes([packet[2], packet[3]]);
26 let err = packet[4] == 0x20;
27 let mem = packet[5..].to_vec();
28 Reply { length: len, id: rid, error: err, memory: mem }
29 }
30 pub fn length(&self) -> u16 { self.length }
32 pub fn id(&self) -> u16 { self.id }
34 pub fn error(&self) -> bool { self.error }
36 pub fn memory(&self) -> &[u8] { &self.memory }
38}
39
40pub fn extract_data<T: Iterator<Item = u8>>(bytes: &mut T, dtype: DataType) -> Vec<u8> {
42 let len = match dtype {
43 DataType::DATA8 => 1,
44 DataType::DATA16 => 2,
45 DataType::DATA32 | DataType::DATAF => 4,
46 DataType::DATAN(length) | DataType::DATAS(length) => length,
47 };
48 bytes.by_ref().take(len).collect::<Vec<u8>>()
49}