Skip to main content

viiper_client/devices/ns2pro/
output.rs

1// This file is auto-generated by VIIPER codegen. DO NOT EDIT.
2
3use crate::wire::DeviceOutput;
4
5#[derive(Debug, Clone, Default)]
6pub struct Ns2proOutput {
7    pub left_rumble: [u8; 16],
8    pub right_rumble: [u8; 16],
9    pub flags: u8,
10    pub player_led_mask: u8,
11}
12
13impl DeviceOutput for Ns2proOutput {
14    fn from_bytes(buf: &[u8]) -> Result<Self, crate::error::ViiperError> {
15        let mut offset = 0;
16        if offset + (std::mem::size_of::<u8>() * 16) > buf.len() {
17			return Err(crate::error::ViiperError::UnexpectedResponse(
18				"buffer too short".into()
19			));
20		}
21		let mut left_rumble = [u8::default(); 16];
22		for i in 0..16 {
23			let bytes = &buf[offset..offset + std::mem::size_of::<u8>()];
24			left_rumble[i] = u8::from_le_bytes(bytes.try_into().unwrap());
25			offset += std::mem::size_of::<u8>();
26		}
27        if offset + (std::mem::size_of::<u8>() * 16) > buf.len() {
28			return Err(crate::error::ViiperError::UnexpectedResponse(
29				"buffer too short".into()
30			));
31		}
32		let mut right_rumble = [u8::default(); 16];
33		for i in 0..16 {
34			let bytes = &buf[offset..offset + std::mem::size_of::<u8>()];
35			right_rumble[i] = u8::from_le_bytes(bytes.try_into().unwrap());
36			offset += std::mem::size_of::<u8>();
37		}
38        if offset + std::mem::size_of::<u8>() > buf.len() {
39            return Err(crate::error::ViiperError::UnexpectedResponse(
40                "buffer too short".into()
41            ));
42        }
43        let flags = u8::from_le_bytes(
44            buf[offset..offset + std::mem::size_of::<u8>()]
45                .try_into()
46                .unwrap()
47        );
48        offset += std::mem::size_of::<u8>();
49        if offset + std::mem::size_of::<u8>() > buf.len() {
50            return Err(crate::error::ViiperError::UnexpectedResponse(
51                "buffer too short".into()
52            ));
53        }
54        let player_led_mask = u8::from_le_bytes(
55            buf[offset..offset + std::mem::size_of::<u8>()]
56                .try_into()
57                .unwrap()
58        );
59        offset += std::mem::size_of::<u8>();
60        let _ = offset; // Suppress unused warning for last field
61        Ok(Self {
62            left_rumble,
63            right_rumble,
64            flags,
65            player_led_mask,
66        })
67    }
68}