xinput/
_lib.rs

1#![doc = include_str!("../Readme.md")]
2
3#![debugger_visualizer(natvis_file = "../xinput.natvis")]
4#![cfg_attr(doc_cfg, feature(doc_cfg))]
5
6#![deny(unsafe_op_in_unsafe_fn)]
7#![warn(rustdoc::broken_intra_doc_links)]
8#![warn(missing_docs)]
9#![deny(unreachable_patterns)] // probably improperly `match { ... }`ed constants
10
11#![allow(clippy::identity_op)]                  // I like to `<< 0`, `+ 0`, etc. for consistency
12#![allow(clippy::missing_safety_doc)]           // I prefer ⚠️ Safety ⚠️ docs
13#![allow(clippy::derivable_impls)]              // I do this a lot for explicitness with d3d enums
14#![allow(clippy::too_many_arguments)]           // 1:1 mapping to XInput... I don't have much of a choice!
15
16// #![warn(clippy::undocumented_unsafe_blocks)]    // too noisy to implement yet
17
18#[cfg(doc)] #[path = "../doc/_doc.rs"] pub mod _doc;
19#[macro_use] mod macros;
20#[macro_use] mod error_macros;
21
22pub mod error; #[doc(no_inline)] pub use error::Error;
23#[path = "interop/_interop.rs"] mod interop;
24
25macro_rules! check_success { ( $err:expr ) => { $crate::check_error_success(&_THINDX_FN_CONTEXT, $err) } }
26
27mods! {
28    inl mod constants {
29        pub mod xuser;
30    }
31
32    inl mod dll {
33        pub(crate) mod imports;
34    }
35
36    inl mod enumerations {
37        inl mod battery_devtype;
38        inl mod battery_level;
39        inl mod battery_type;
40        inl mod devsubtype;
41        inl mod devtype;
42        inl mod vk;
43    }
44
45    inl mod flags {
46        inl mod buttons;
47        inl mod caps;
48        inl mod flag;
49        inl mod keystroke;
50    }
51
52    inl mod functions {
53        inl mod enable_;
54        inl mod get_audio_device_ids_;
55        inl mod get_battery_information_;
56        inl mod get_capabilities_;
57        inl mod get_dsound_audio_device_guids_;
58        inl mod get_keystroke_;
59        inl mod get_state_;
60        inl mod set_state_;
61        #[cfg(doc)] pub mod todo;
62    }
63
64    inl mod structures {
65        inl mod audio_device_ids;
66        inl mod battery_information;
67        inl mod capabilities;
68        inl mod dsound_audio_device_guids;
69        inl mod gamepad;
70        inl mod keystroke;
71        inl mod state;
72        inl mod vibration;
73    }
74}
75
76include!("functions/get_state_ex_.rs");
77include!("functions/power_off_controller_.rs");
78
79pub(crate) fn check_error_success(fn_context: &'static crate::error_macros::FnContext, err: u32) -> Result<(), Error> {
80    if err == winresult::ERROR::SUCCESS.to_u32() {
81        Ok(())
82    } else {
83        Err(Error(fn_context, error::Kind::from_u32(err)))
84    }
85}