#![doc(html_root_url = "http://arcnmx.github.io/input-linux-rs/")]
pub extern crate input_linux_sys as sys;
extern crate nix;
#[cfg(feature = "with-serde")]
extern crate serde;
#[cfg(feature = "with-serde")]
#[macro_use]
extern crate serde_derive;
#[macro_use]
mod macros;
mod kinds;
pub use kinds::*;
mod time;
pub use time::EventTime;
mod events;
pub use events::*;
mod keys;
pub use keys::Key;
pub mod evdev;
pub use evdev::EvdevHandle;
pub mod uinput;
pub use uinput::UInputHandle;
pub mod enum_iterator;
pub mod bitmask;
pub use bitmask::Bitmask;
#[cfg(feature = "with-tokio")]
mod tokio;
#[cfg(feature = "with-tokio")]
pub use tokio::EventCodec;
#[repr(C)]
#[derive(Copy, Clone, Default, PartialOrd, Ord, PartialEq, Eq, Hash, Debug)]
#[cfg_attr(feature = "with-serde", derive(Deserialize, Serialize))]
pub struct InputId {
pub bustype: u16,
pub vendor: u16,
pub product: u16,
pub version: u16,
}
impl<'a> From<&'a sys::input_id> for &'a InputId {
fn from(id: &'a sys::input_id) -> Self {
let raw = id as *const _ as *const _;
unsafe { &*raw }
}
}
impl<'a> From<&'a InputId> for &'a sys::input_id {
fn from(id: &'a InputId) -> Self {
let raw = id as *const _ as *const _;
unsafe { &*raw }
}
}
impl From<sys::input_id> for InputId {
fn from(id: sys::input_id) -> Self {
<&InputId>::from(&id).clone()
}
}
impl From<InputId> for sys::input_id {
fn from(id: InputId) -> Self {
<&sys::input_id>::from(&id).clone()
}
}
#[repr(C)]
#[derive(Copy, Clone, PartialOrd, Ord, PartialEq, Eq, Hash, Debug)]
#[cfg_attr(feature = "with-serde", derive(Deserialize, Serialize))]
pub struct AbsoluteInfoSetup {
pub axis: AbsoluteAxis,
pub info: AbsoluteInfo,
}
impl<'a> From<&'a AbsoluteInfoSetup> for &'a sys::uinput_abs_setup {
fn from(info: &'a AbsoluteInfoSetup) -> Self {
let raw = info as *const _ as *const _;
unsafe { &*raw }
}
}
impl From<AbsoluteInfoSetup> for sys::uinput_abs_setup {
fn from(info: AbsoluteInfoSetup) -> Self {
use std::mem;
unsafe {
mem::transmute(info)
}
}
}
#[repr(C)]
#[derive(Copy, Clone, Default, PartialOrd, Ord, PartialEq, Eq, Hash, Debug)]
#[cfg_attr(feature = "with-serde", derive(Deserialize, Serialize))]
pub struct AbsoluteInfo {
pub value: i32,
pub minimum: i32,
pub maximum: i32,
pub fuzz: i32,
pub flat: i32,
pub resolution: i32,
}
impl<'a> From<&'a sys::input_absinfo> for &'a AbsoluteInfo {
fn from(info: &'a sys::input_absinfo) -> Self {
let raw = info as *const _ as *const _;
unsafe { &*raw }
}
}
impl<'a> From<&'a AbsoluteInfo> for &'a sys::input_absinfo {
fn from(info: &'a AbsoluteInfo) -> Self {
let raw = info as *const _ as *const _;
unsafe { &*raw }
}
}
impl From<sys::input_absinfo> for AbsoluteInfo {
fn from(info: sys::input_absinfo) -> Self {
<&AbsoluteInfo>::from(&info).clone()
}
}
impl From<AbsoluteInfo> for sys::input_absinfo {
fn from(info: AbsoluteInfo) -> Self {
<&sys::input_absinfo>::from(&info).clone()
}
}