use crate::wire::DeviceOutput;
#[derive(Debug, Clone, Default)]
pub struct Xbox360Output {
pub left: u8,
pub right: u8,
}
impl DeviceOutput for Xbox360Output {
fn from_bytes(buf: &[u8]) -> Result<Self, crate::error::ViiperError> {
let mut offset = 0;
if offset + std::mem::size_of::<u8>() > buf.len() {
return Err(crate::error::ViiperError::UnexpectedResponse(
"buffer too short".into()
));
}
let left = u8::from_le_bytes(
buf[offset..offset + std::mem::size_of::<u8>()]
.try_into()
.unwrap()
);
offset += std::mem::size_of::<u8>();
if offset + std::mem::size_of::<u8>() > buf.len() {
return Err(crate::error::ViiperError::UnexpectedResponse(
"buffer too short".into()
));
}
let right = u8::from_le_bytes(
buf[offset..offset + std::mem::size_of::<u8>()]
.try_into()
.unwrap()
);
offset += std::mem::size_of::<u8>();
let _ = offset; Ok(Self {
left,
right,
})
}
}