use crate::*;
use crate::xinput::*;
use bytemuck::Zeroable;
use winapi::um::xinput::*;
pub fn get_capabilities(user_index: impl Into<User>, flags: Flag) -> Result<Capabilities, MethodError> {
let mut caps = Capabilities::zeroed();
let code = unsafe { XInputGetCapabilities(user_index.into().into(), flags.into(), &mut caps as *mut _ as *mut _) };
check_error_success("XInputGetCapabilities", code)?;
Ok(caps)
}
#[test] fn test_valid_params() {
if let Err(err) = get_capabilities(User::Zero, Flag::Gamepad) { assert_eq!(err.kind(), ERROR::DEVICE_NOT_CONNECTED); }
if let Err(err) = get_capabilities(User::Three, Flag::Gamepad) { assert_eq!(err.kind(), ERROR::DEVICE_NOT_CONNECTED); }
if let Err(err) = get_capabilities(User::Zero, Flag::None ) { assert_eq!(err.kind(), ERROR::DEVICE_NOT_CONNECTED); }
if let Err(err) = get_capabilities(User::Three, Flag::None ) { assert_eq!(err.kind(), ERROR::DEVICE_NOT_CONNECTED); }
}
#[test] fn test_bad_arguments() {
assert_eq!(ERROR::BAD_ARGUMENTS, get_capabilities(User::Any, Flag::Gamepad)); assert_eq!(ERROR::BAD_ARGUMENTS, get_capabilities(User::from_unchecked(4), Flag::Gamepad)); assert_eq!(ERROR::BAD_ARGUMENTS, get_capabilities(User::Zero, Flag::from_unchecked(42))); assert_eq!(ERROR::BAD_ARGUMENTS, get_capabilities(User::Zero, Flag::from_unchecked(!0))); }