blob: 290772dbddd95e8de2b81cf205d100acd3e03acb [file] [log] [blame]
use super::prelude::*;
use crate::target::ext::host_io::{HostIoOpenFlags, HostIoOpenMode};
#[derive(Debug)]
pub struct vFileOpen<'a> {
pub filename: &'a [u8],
pub flags: HostIoOpenFlags,
pub mode: HostIoOpenMode,
}
impl<'a> ParseCommand<'a> for vFileOpen<'a> {
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_no_panic(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,
}
}
}