sbd_lib/mt/
confirmation_status.rs1use crate::Result;
2use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt};
3use std::io::{Read, Write};
4
5#[derive(Copy, Clone, Debug, Eq, PartialEq)]
9pub struct ConfirmationStatus {
10 pub message_id: u32,
12 pub imei: [u8; 15],
14 pub auto_id: u32,
16 pub status: i16,
18}
19impl ConfirmationStatus {
20 pub fn status(&self) -> bool {
21 self.status > 0
22 }
23
24 pub fn read_from(read: &mut dyn Read) -> Result<Self> {
25 use crate::Error;
26
27 let message_id = read.read_u32::<BigEndian>().map_err(Error::Io)?;
28 let mut imei = [0; 15];
29 read.read_exact(&mut imei).map_err(Error::Io)?;
30 let auto_id = read.read_u32::<BigEndian>().map_err(Error::Io)?;
31
32 let status = read.read_i16::<BigEndian>().map_err(Error::Io)?;
33
34 Ok(ConfirmationStatus {
35 message_id,
36 auto_id,
37 imei,
38 status,
39 })
40 }
41
42 pub fn write_to<W: Write>(&self, write: &mut W) -> Result<()> {
43 write.write_u8(0x44)?;
44 write.write_u16::<BigEndian>(25)?;
45 write.write_u32::<BigEndian>(self.message_id)?;
46 write.write_all(&self.imei)?;
47 write.write_u32::<BigEndian>(self.auto_id)?;
48 write.write_i16::<BigEndian>(self.status)?;
49 Ok(())
50 }
51
52 pub fn len(&self) -> usize {
53 28
54 }
55}