gdbstub 0.7.10

An implementation of the GDB Remote Serial Protocol in Rust
Documentation
use super::prelude::*;
use crate::protocol::common::thread_id::ThreadId;
use crate::protocol::ConcreteThreadId;

#[derive(Debug)]
pub struct qThreadExtraInfo<'a> {
    pub id: ConcreteThreadId,

    pub buf: &'a mut [u8],
}

impl<'a> ParseCommand<'a> for qThreadExtraInfo<'a> {
    #[inline(always)]
    fn from_packet(buf: PacketBuf<'a>) -> Option<Self> {
        let (buf, body_range) = buf.into_raw_buf();
        let body = buf.get(body_range.start..body_range.end)?;

        if body.is_empty() {
            return None;
        }

        match body {
            [b',', body @ ..] => {
                let id = ConcreteThreadId::try_from(ThreadId::try_from(body).ok()?).ok()?;

                Some(qThreadExtraInfo { id, buf })
            }
            _ => None,
        }
    }
}