Skip to main content

viiper_client/devices/dualshock4/
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 Dualshock4Output {
7    pub rumble_small: u8,
8    pub rumble_large: u8,
9    pub led_red: u8,
10    pub led_green: u8,
11    pub led_blue: u8,
12    pub flash_on: u8,
13    pub flash_off: u8,
14}
15
16impl DeviceOutput for Dualshock4Output {
17    fn from_bytes(buf: &[u8]) -> Result<Self, crate::error::ViiperError> {
18        let mut offset = 0;
19        if offset + std::mem::size_of::<u8>() > buf.len() {
20            return Err(crate::error::ViiperError::UnexpectedResponse(
21                "buffer too short".into()
22            ));
23        }
24        let rumble_small = u8::from_le_bytes(
25            buf[offset..offset + std::mem::size_of::<u8>()]
26                .try_into()
27                .unwrap()
28        );
29        offset += std::mem::size_of::<u8>();
30        if offset + std::mem::size_of::<u8>() > buf.len() {
31            return Err(crate::error::ViiperError::UnexpectedResponse(
32                "buffer too short".into()
33            ));
34        }
35        let rumble_large = u8::from_le_bytes(
36            buf[offset..offset + std::mem::size_of::<u8>()]
37                .try_into()
38                .unwrap()
39        );
40        offset += std::mem::size_of::<u8>();
41        if offset + std::mem::size_of::<u8>() > buf.len() {
42            return Err(crate::error::ViiperError::UnexpectedResponse(
43                "buffer too short".into()
44            ));
45        }
46        let led_red = u8::from_le_bytes(
47            buf[offset..offset + std::mem::size_of::<u8>()]
48                .try_into()
49                .unwrap()
50        );
51        offset += std::mem::size_of::<u8>();
52        if offset + std::mem::size_of::<u8>() > buf.len() {
53            return Err(crate::error::ViiperError::UnexpectedResponse(
54                "buffer too short".into()
55            ));
56        }
57        let led_green = u8::from_le_bytes(
58            buf[offset..offset + std::mem::size_of::<u8>()]
59                .try_into()
60                .unwrap()
61        );
62        offset += std::mem::size_of::<u8>();
63        if offset + std::mem::size_of::<u8>() > buf.len() {
64            return Err(crate::error::ViiperError::UnexpectedResponse(
65                "buffer too short".into()
66            ));
67        }
68        let led_blue = u8::from_le_bytes(
69            buf[offset..offset + std::mem::size_of::<u8>()]
70                .try_into()
71                .unwrap()
72        );
73        offset += std::mem::size_of::<u8>();
74        if offset + std::mem::size_of::<u8>() > buf.len() {
75            return Err(crate::error::ViiperError::UnexpectedResponse(
76                "buffer too short".into()
77            ));
78        }
79        let flash_on = u8::from_le_bytes(
80            buf[offset..offset + std::mem::size_of::<u8>()]
81                .try_into()
82                .unwrap()
83        );
84        offset += std::mem::size_of::<u8>();
85        if offset + std::mem::size_of::<u8>() > buf.len() {
86            return Err(crate::error::ViiperError::UnexpectedResponse(
87                "buffer too short".into()
88            ));
89        }
90        let flash_off = u8::from_le_bytes(
91            buf[offset..offset + std::mem::size_of::<u8>()]
92                .try_into()
93                .unwrap()
94        );
95        offset += std::mem::size_of::<u8>();
96        let _ = offset; // Suppress unused warning for last field
97        Ok(Self {
98            rumble_small,
99            rumble_large,
100            led_red,
101            led_green,
102            led_blue,
103            flash_on,
104            flash_off,
105        })
106    }
107}