1 use super::prelude::*; 2 use crate::protocol::common::thread_id::ThreadId; 3 use crate::protocol::ConcreteThreadId; 4 5 #[derive(Debug)] 6 pub struct qThreadExtraInfo<'a> { 7 pub id: ConcreteThreadId, 8 9 pub buf: &'a mut [u8], 10 } 11 12 impl<'a> ParseCommand<'a> for qThreadExtraInfo<'a> { 13 #[inline(always)] from_packet(buf: PacketBuf<'a>) -> Option<Self>14 fn from_packet(buf: PacketBuf<'a>) -> Option<Self> { 15 let (buf, body_range) = buf.into_raw_buf(); 16 let body = buf.get(body_range.start..body_range.end)?; 17 18 if body.is_empty() { 19 return None; 20 } 21 22 match body { 23 [b',', body @ ..] => { 24 let id = ConcreteThreadId::try_from(ThreadId::try_from(body).ok()?).ok()?; 25 26 Some(qThreadExtraInfo { id, buf }) 27 } 28 _ => None, 29 } 30 } 31 } 32