diff options
Diffstat (limited to 'src/protocol/commands/_x_upcase.rs')
-rw-r--r-- | src/protocol/commands/_x_upcase.rs | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/protocol/commands/_x_upcase.rs b/src/protocol/commands/_x_upcase.rs new file mode 100644 index 0000000..218c16c --- /dev/null +++ b/src/protocol/commands/_x_upcase.rs @@ -0,0 +1,24 @@ +use super::prelude::*; + +use crate::protocol::common::hex::decode_bin_buf; + +#[derive(Debug)] +pub struct X<'a> { + pub addr: &'a [u8], + pub len: usize, + pub val: &'a [u8], +} + +impl<'a> ParseCommand<'a> for X<'a> { + #[inline(always)] + fn from_packet(buf: PacketBuf<'a>) -> Option<Self> { + let body = buf.into_body(); + + let mut body = body.splitn_mut(3, |&b| b == b',' || b == b':'); + let addr = decode_hex_buf(body.next()?).ok()?; + let len = decode_hex(body.next()?).ok()?; + let val = decode_bin_buf(body.next()?)?; + + Some(X { addr, len, val }) + } +} |