gdbstub/protocol/commands/
_qSupported.rs1use super::prelude::*;
2
3#[derive(Debug)]
4pub struct qSupported<'a> {
5 pub packet_buffer_len: usize,
6 pub features: Features<'a>,
7}
8
9impl<'a> ParseCommand<'a> for qSupported<'a> {
10 #[inline(always)]
11 fn from_packet(buf: PacketBuf<'a>) -> Option<Self> {
12 let packet_buffer_len = buf.full_len();
13 let body = buf.into_body();
14 match body {
15 [b':', body @ ..] => Some(qSupported {
16 packet_buffer_len,
17 features: Features(body),
18 }),
19 _ => None,
20 }
21 }
22}
23
24#[derive(Debug)]
25pub struct Features<'a>(&'a [u8]);
26
27impl<'a> Features<'a> {
28 pub fn into_iter(self) -> impl Iterator<Item = Result<Option<(Feature, bool)>, ()>> + 'a {
29 self.0.split(|b| *b == b';').map(|s| match s.last() {
30 None => Err(()),
31 Some(&c) => match c {
32 b'+' | b'-' => {
33 let feature = match &s[..s.len() - 1] {
34 b"multiprocess" => Feature::Multiprocess,
35 _ => return Ok(None),
37 };
38 Ok(Some((feature, c == b'+')))
39 }
40 _ => {
41 Ok(None)
45 }
46 },
47 })
48 }
49}
50
51#[derive(Debug)]
52pub enum Feature {
53 Multiprocess,
54}