viiper_client/devices/xbox360/
output.rs1use crate::wire::DeviceOutput;
4
5#[derive(Debug, Clone, Default)]
6pub struct Xbox360Output {
7 pub left: u8,
8 pub right: u8,
9}
10
11impl DeviceOutput for Xbox360Output {
12 fn from_bytes(buf: &[u8]) -> Result<Self, crate::error::ViiperError> {
13 let mut offset = 0;
14 if offset + std::mem::size_of::<u8>() > buf.len() {
15 return Err(crate::error::ViiperError::UnexpectedResponse(
16 "buffer too short".into()
17 ));
18 }
19 let left = u8::from_le_bytes(
20 buf[offset..offset + std::mem::size_of::<u8>()]
21 .try_into()
22 .unwrap()
23 );
24 offset += std::mem::size_of::<u8>();
25 if offset + std::mem::size_of::<u8>() > buf.len() {
26 return Err(crate::error::ViiperError::UnexpectedResponse(
27 "buffer too short".into()
28 ));
29 }
30 let right = u8::from_le_bytes(
31 buf[offset..offset + std::mem::size_of::<u8>()]
32 .try_into()
33 .unwrap()
34 );
35 offset += std::mem::size_of::<u8>();
36 let _ = offset; Ok(Self {
38 left,
39 right,
40 })
41 }
42}