use crate::std;
use std::fmt;
use crate::{
bool_enum, impl_extended_ops, impl_message_ops, impl_omnibus_extended_reply,
len::{CLEAR_AUDIT_DATA_REQUEST_ACK, CLEAR_AUDIT_DATA_REQUEST_RESULTS},
ExtendedCommand, ExtendedCommandOps, MessageOps, MessageType, OmnibusReplyOps,
};
bool_enum!(
ClearAuditAckNak,
r"Whether the device is able to perform the Clear Audit Data Request."
);
bool_enum!(
ClearAuditPassFail,
r"Whether the device successfully proccessed the Clear Audit Data Request."
);
pub mod index {
pub const ACKNAK: usize = 10;
pub const PASS_FAIL: usize = 10;
}
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct ClearAuditDataRequestAck {
buf: [u8; CLEAR_AUDIT_DATA_REQUEST_ACK],
}
impl ClearAuditDataRequestAck {
pub fn new() -> Self {
let mut message = Self {
buf: [0u8; CLEAR_AUDIT_DATA_REQUEST_ACK],
};
message.init();
message.set_message_type(MessageType::Extended);
message.set_extended_command(ExtendedCommand::ClearAuditDataRequest);
message
}
pub fn audit_acknak(&self) -> ClearAuditAckNak {
self.buf[index::ACKNAK].into()
}
}
impl_message_ops!(ClearAuditDataRequestAck);
impl_omnibus_extended_reply!(ClearAuditDataRequestAck);
impl_extended_ops!(ClearAuditDataRequestAck);
impl fmt::Display for ClearAuditDataRequestAck {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"AckNak: {}, DeviceType: {}, MessageType: {}, Subtype: {}, DeviceState: {}, DeviceStatus: {}, ExceptionStatus: {}, MiscDeviceState: {}, ModelNumber: {}, CodeRevision: {}, AuditAckNak: {}",
self.acknak(),
self.device_type(),
self.message_type(),
self.extended_command(),
self.device_state(),
self.device_status(),
self.exception_status(),
self.misc_device_state(),
self.model_number(),
self.code_revision(),
self.audit_acknak(),
)
}
}
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct ClearAuditDataRequestResults {
buf: [u8; CLEAR_AUDIT_DATA_REQUEST_RESULTS],
}
impl ClearAuditDataRequestResults {
pub fn new() -> Self {
let mut message = Self {
buf: [0u8; CLEAR_AUDIT_DATA_REQUEST_RESULTS],
};
message.init();
message.set_message_type(MessageType::Extended);
message.set_extended_command(ExtendedCommand::ClearAuditDataRequest);
message
}
pub fn pass_fail(&self) -> ClearAuditPassFail {
self.buf[index::PASS_FAIL].into()
}
}
impl_message_ops!(ClearAuditDataRequestResults);
impl_omnibus_extended_reply!(ClearAuditDataRequestResults);
impl_extended_ops!(ClearAuditDataRequestResults);
impl fmt::Display for ClearAuditDataRequestResults {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"AckNak: {}, DeviceType: {}, MessageType: {}, Subtype: {}, DeviceState: {}, DeviceStatus: {}, ExceptionStatus: {}, MiscDeviceState: {}, ModelNumber: {}, CodeRevision: {}, PassFail: {}",
self.acknak(),
self.device_type(),
self.message_type(),
self.extended_command(),
self.device_state(),
self.device_status(),
self.exception_status(),
self.misc_device_state(),
self.model_number(),
self.code_revision(),
self.pass_fail(),
)
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::Result;
#[test]
#[rustfmt::skip]
fn test_clear_audit_data_request_ack_from_bytes() -> Result<()> {
let msg_bytes = [
0x02, 0x0d, 0x70, 0x1d,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01,
0x03, 0x61,
];
let mut msg = ClearAuditDataRequestAck::new();
msg.from_buf(msg_bytes.as_ref())?;
assert_eq!(msg.message_type(), MessageType::Extended);
assert_eq!(
msg.extended_command(),
ExtendedCommand::ClearAuditDataRequest
);
assert_eq!(msg.audit_acknak(), ClearAuditAckNak::Set);
let msg_bytes = [
0x02, 0x0d, 0x70, 0x1d,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00,
0x03, 0x60,
];
msg.from_buf(msg_bytes.as_ref())?;
assert_eq!(msg.message_type(), MessageType::Extended);
assert_eq!(
msg.extended_command(),
ExtendedCommand::ClearAuditDataRequest
);
assert_eq!(msg.audit_acknak(), ClearAuditAckNak::Unset);
Ok(())
}
#[test]
#[rustfmt::skip]
fn test_clear_audit_data_request_results_from_bytes() -> Result<()> {
let msg_bytes = [
0x02, 0x0d, 0x70, 0x1d,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11,
0x03, 0x71,
];
let mut msg = ClearAuditDataRequestResults::new();
msg.from_buf(msg_bytes.as_ref())?;
assert_eq!(msg.message_type(), MessageType::Extended);
assert_eq!(
msg.extended_command(),
ExtendedCommand::ClearAuditDataRequest
);
assert_eq!(msg.pass_fail(), ClearAuditPassFail::Set);
let msg_bytes = [
0x02, 0x0d, 0x70, 0x1d,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10,
0x03, 0x70,
];
msg.from_buf(msg_bytes.as_ref())?;
assert_eq!(msg.message_type(), MessageType::Extended);
assert_eq!(
msg.extended_command(),
ExtendedCommand::ClearAuditDataRequest
);
assert_eq!(msg.pass_fail(), ClearAuditPassFail::Unset);
Ok(())
}
}