gdbstub 0.7.10

An implementation of the GDB Remote Serial Protocol in Rust
Documentation
use super::prelude::*;
use crate::target::ext::host_io::HostIoOpenFlags;
use crate::target::ext::host_io::HostIoOpenMode;

#[derive(Debug)]
pub struct vFileOpen<'a> {
    pub filename: &'a [u8],
    pub flags: HostIoOpenFlags,
    pub mode: HostIoOpenMode,
}

impl<'a> ParseCommand<'a> for vFileOpen<'a> {
    #[inline(always)]
    fn from_packet(buf: PacketBuf<'a>) -> Option<Self> {
        let body = buf.into_body();
        if body.is_empty() {
            return None;
        }

        match body {
            [b':', body @ ..] => {
                let mut body = body.splitn_mut(3, |b| *b == b',');
                let filename = decode_hex_buf(body.next()?).ok()?;
                let flags = HostIoOpenFlags::from_bits(decode_hex(body.next()?).ok()?)?;
                let mode = HostIoOpenMode::from_bits(decode_hex(body.next()?).ok()?)?;
                Some(vFileOpen {
                    filename,
                    flags,
                    mode,
                })
            }
            _ => None,
        }
    }
}