• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use super::prelude::*;
2 use crate::target::ext::tracepoints::Tracepoint;
3 use crate::target::ext::tracepoints::TracepointSourceType;
4 
5 pub struct QTDPsrc<'a> {
6     pub number: Tracepoint,
7     pub addr: &'a [u8],
8     pub kind: TracepointSourceType,
9     pub start: u32,
10     pub slen: u32,
11     pub bytes: &'a mut [u8],
12 }
13 
14 impl<'a> ParseCommand<'a> for QTDPsrc<'a> {
15     #[inline(always)]
from_packet(buf: PacketBuf<'a>) -> Option<Self>16     fn from_packet(buf: PacketBuf<'a>) -> Option<Self> {
17         let body = buf.into_body();
18         match body {
19             [b':', info @ ..] => {
20                 let mut params = info.splitn_mut(7, |b| *b == b':');
21                 let number = Tracepoint(decode_hex(params.next()?).ok()?);
22                 let addr = decode_hex_buf(params.next()?).ok()?;
23                 // Clippy incorrect thinks this as_ref isn't needed, but it is.
24                 #[allow(clippy::useless_asref)]
25                 let kind = match params.next()?.as_ref() {
26                     b"at" => Some(TracepointSourceType::At),
27                     b"cond" => Some(TracepointSourceType::Cond),
28                     b"cmd" => Some(TracepointSourceType::Cmd),
29                     _ => None,
30                 }?;
31                 let start = decode_hex(params.next()?).ok()?;
32                 let slen = decode_hex(params.next()?).ok()?;
33                 let bytes = decode_hex_buf(params.next()?).ok()?;
34                 Some(QTDPsrc {
35                     number,
36                     addr,
37                     kind,
38                     start,
39                     slen,
40                     bytes,
41                 })
42             }
43             _ => None,
44         }
45     }
46 }
47