1 use super::prelude::*; 2 3 #[derive(Debug)] 4 pub struct QEnvironmentHexEncoded<'a> { 5 pub key: &'a [u8], 6 pub value: Option<&'a [u8]>, 7 } 8 9 impl<'a> ParseCommand<'a> for QEnvironmentHexEncoded<'a> { 10 #[inline(always)] from_packet(buf: PacketBuf<'a>) -> Option<Self>11 fn from_packet(buf: PacketBuf<'a>) -> Option<Self> { 12 let body = buf.into_body(); 13 14 let (key, value) = match body { 15 [b':', keyval @ ..] => { 16 let keyval = decode_hex_buf(keyval).ok()?; 17 let mut keyval = keyval.splitn(2, |b| *b == b'='); 18 let key = keyval.next()?; 19 let value = match keyval.next()? { 20 [] => None, 21 s => Some(s), 22 }; 23 (key, value) 24 } 25 _ => return None, 26 }; 27 28 Some(QEnvironmentHexEncoded { key, value }) 29 } 30 } 31