use crate::{
bool_enum, impl_extended_ops, impl_message_ops, impl_omnibus_extended_command,
len::NOTE_RETRIEVED_COMMAND, ExtendedCommand, ExtendedCommandOps, MessageOps, MessageType,
};
pub mod index {
pub const STATUS: usize = 7;
}
bool_enum!(
Status,
"Whether to enable/disable Note Retrieved functionality"
);
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct NoteRetrievedCommand {
buf: [u8; NOTE_RETRIEVED_COMMAND],
}
impl NoteRetrievedCommand {
pub fn new() -> Self {
let mut message = Self {
buf: [0u8; NOTE_RETRIEVED_COMMAND],
};
message.init();
message.set_message_type(MessageType::Extended);
message.set_extended_command(ExtendedCommand::NoteRetrieved);
message
}
pub fn status(&self) -> Status {
self.buf[index::STATUS].into()
}
pub fn set_status(&mut self, status: Status) {
self.buf[index::STATUS] = status.into();
}
}
impl_message_ops!(NoteRetrievedCommand);
impl_omnibus_extended_command!(NoteRetrievedCommand);
impl_extended_ops!(NoteRetrievedCommand);
#[cfg(test)]
mod tests {
use super::*;
use crate::Result;
#[test]
#[rustfmt::skip]
fn test_note_retrieved_command_from_buf() -> Result<()> {
let msg_bytes = [
0x02, 0x0a, 0x70, 0x0b,
0x00, 0x00, 0x00,
0x01,
0x03, 0x70,
];
let mut msg = NoteRetrievedCommand::new();
msg.from_buf(msg_bytes.as_ref())?;
assert_eq!(msg.message_type(), MessageType::Extended);
assert_eq!(msg.extended_command(), ExtendedCommand::NoteRetrieved);
assert_eq!(msg.status(), Status::Set);
let msg_bytes = [
0x02, 0x0a, 0x70, 0x0b,
0x00, 0x00, 0x00,
0x00,
0x03, 0x71,
];
msg.from_buf(msg_bytes.as_ref())?;
assert_eq!(msg.message_type(), MessageType::Extended);
assert_eq!(msg.extended_command(), ExtendedCommand::NoteRetrieved);
assert_eq!(msg.status(), Status::Unset);
Ok(())
}
}