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 { 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, } } }