xinput/structures/
state.rs

1use crate::*;
2use bytemuck::{Pod, Zeroable};
3
4
5
6/// \[[microsoft.com](https://learn.microsoft.com/en-us/windows/win32/api/xinput/ns-xinput-xinput_state)\]
7/// XINPUT_STATE
8///
9/// Packet number + [`Gamepad`] state.
10#[derive(Clone, Copy, Debug)]
11#[derive(Default, Pod, Zeroable)]
12#[repr(C)] pub struct State {
13    /// State packet number.
14    /// The packet number indicates whether there have been any changes in the state of the controller.
15    /// If `packet_number` is the same in sequentially returned [`State`] structures, the controller state has not changed.
16    pub packet_number: u32,
17
18    /// The gamepad state.
19    pub gamepad:        Gamepad,
20}
21
22impl AsRef<Self> for State { fn as_ref(&    self) -> &    Self { self } }
23impl AsMut<Self> for State { fn as_mut(&mut self) -> &mut Self { self } }
24
25// N.B. these deref to Gamepad, not to XINPUT_STATE
26impl core::ops::Deref for State {
27    type Target = Gamepad;
28    fn deref(&self) -> &Gamepad { &self.gamepad }
29}
30
31impl core::ops::DerefMut for State {
32    fn deref_mut(&mut self) -> &mut Gamepad { &mut self.gamepad }
33}
34
35#[test] fn test_traits_for_coverage() {
36    let _state = State::default();
37    let _state = State::zeroed();
38    let mut _state = _state.clone();
39    let _ = _state.left_trigger;
40    _state.left_trigger = 42;
41    dbg!(_state);
42}
43
44//#cpp2rust XINPUT_STATE                = xinput::State