use bytemuck::{Pod, Zeroable};
use winapi::um::xinput::*;
use std::fmt::{self, Debug, Formatter};
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[derive(Default, Pod, Zeroable)]
#[repr(transparent)]
pub struct User(u8);
impl User { #[allow(missing_docs)] pub const fn from_unchecked(index: u8) -> Self { Self(index) } }
impl Debug for User { fn fmt(&self, fmt: &mut Formatter) -> fmt::Result { if *self == User::Any { Debug::fmt("User::Any", fmt) } else { write!(fmt, "User({})", self.0) } } }
impl From<User> for u8 { fn from(user: User) -> Self { user.0 } } impl From<User> for u32 { fn from(user: User) -> Self { user.0.into() } }
#[allow(non_upper_case_globals)] impl User {
#[allow(missing_docs)] pub const Zero : User = User(0);
#[allow(missing_docs)] pub const One : User = User(1);
#[allow(missing_docs)] pub const Two : User = User(2);
#[allow(missing_docs)] pub const Three : User = User(3);
pub const Any : User = User(XUSER_INDEX_ANY as _);
pub const MAX_COUNT : u8 = XUSER_MAX_COUNT as _;
pub fn iter_valid() -> impl Iterator<Item = User> { [User::Zero, User::One, User::Two, User::Three].iter().copied() }
}