aboutsummaryrefslogtreecommitdiff
path: root/src/protocol/commands/_qThreadExtraInfo.rs
blob: d89fbcd0a1ec5bb5f485dc166ae9b7a82416a59f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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,
        }
    }
}