Skip to main content

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