Skip to main content

ssp/last_reject_code/
response.rs

1use crate::{
2    impl_default, impl_message_from_buf, impl_message_ops, impl_response_ops,
3    len::LAST_REJECT_CODE_RESPONSE, std::fmt, LastRejectCode, MessageOps, MessageType, ResponseOps,
4};
5
6mod index {
7    pub const REJECT_CODE: usize = 4;
8}
9
10/// LastRejectCode - Response (0x17)
11///
12/// Represents a response to an [LastRejectCodeCommand](crate::LastRejectCodeCommand) message.
13#[repr(C)]
14#[derive(Clone, Copy, Debug, PartialEq)]
15pub struct LastRejectCodeResponse {
16    buf: [u8; LAST_REJECT_CODE_RESPONSE],
17}
18
19impl LastRejectCodeResponse {
20    /// Creates a new [LastRejectCodeResponse] message.
21    pub fn new() -> Self {
22        let mut msg = Self {
23            buf: [0u8; LAST_REJECT_CODE_RESPONSE],
24        };
25
26        msg.init();
27
28        msg
29    }
30
31    /// Gets the [LastRejectCode].
32    pub fn reject_code(&self) -> LastRejectCode {
33        self.buf[index::REJECT_CODE].into()
34    }
35
36    /// Sets the [LastRejectCode].
37    pub fn set_reject_code(&mut self, code: LastRejectCode) {
38        self.buf[index::REJECT_CODE] = code.into();
39    }
40}
41
42impl_default!(LastRejectCodeResponse);
43impl_message_from_buf!(LastRejectCodeResponse);
44impl_message_ops!(LastRejectCodeResponse, MessageType::LastRejectCode);
45impl_response_ops!(LastRejectCodeResponse);
46
47impl fmt::Display for LastRejectCodeResponse {
48    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
49        let stx = self.stx();
50        let seqid = self.sequence_id();
51        let len = self.data_len();
52        let status = self.response_status();
53        let code = self.reject_code();
54        let crc = self.checksum();
55
56        write!(f, "STX: 0x{stx:02x} | SEQID: {seqid} | LEN: 0x{len:02x} | Response status: {status} | Last reject code: {code} | CRC-16: 0x{crc:04x}")
57    }
58}