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