use super::prelude::*; use crate::target::ext::tracepoints::Tracepoint; use crate::target::ext::tracepoints::TracepointSourceType; pub struct QTDPsrc<'a> { pub number: Tracepoint, pub addr: &'a [u8], pub kind: TracepointSourceType, pub start: u32, pub slen: u32, pub bytes: &'a mut [u8], } impl<'a> ParseCommand<'a> for QTDPsrc<'a> { #[inline(always)] fn from_packet(buf: PacketBuf<'a>) -> Option { let body = buf.into_body(); match body { [b':', info @ ..] => { let mut params = info.splitn_mut(7, |b| *b == b':'); let number = Tracepoint(decode_hex(params.next()?).ok()?); let addr = decode_hex_buf(params.next()?).ok()?; // Clippy incorrect thinks this as_ref isn't needed, but it is. #[allow(clippy::useless_asref)] let kind = match params.next()?.as_ref() { b"at" => Some(TracepointSourceType::At), b"cond" => Some(TracepointSourceType::Cond), b"cmd" => Some(TracepointSourceType::Cmd), _ => None, }?; let start = decode_hex(params.next()?).ok()?; let slen = decode_hex(params.next()?).ok()?; let bytes = decode_hex_buf(params.next()?).ok()?; Some(QTDPsrc { number, addr, kind, start, slen, bytes, }) } _ => None, } } }