viiper-client 0.7.0

VIIPER Client Library for Rust
Documentation
// This file is auto-generated by VIIPER codegen. DO NOT EDIT.

use crate::wire::DeviceOutput;

#[derive(Debug, Clone, Default)]
pub struct DualsenseOutput {
    pub rumble_small: u8,
    pub rumble_large: u8,
    pub led_red: u8,
    pub led_green: u8,
    pub led_blue: u8,
    pub player_leds: u8,
}

impl DeviceOutput for DualsenseOutput {
    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 rumble_small = 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 rumble_large = 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 led_red = 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 led_green = 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 led_blue = 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 player_leds = u8::from_le_bytes(
            buf[offset..offset + std::mem::size_of::<u8>()]
                .try_into()
                .unwrap()
        );
        offset += std::mem::size_of::<u8>();
        let _ = offset; // Suppress unused warning for last field
        Ok(Self {
            rumble_small,
            rumble_large,
            led_red,
            led_green,
            led_blue,
            player_leds,
        })
    }
}