memflow/os/
keyboard.rs

1//! Describes optional keyboard input for a Operating System
2
3use crate::cglue::*;
4use crate::prelude::v1::Result;
5
6#[cfg_attr(feature = "plugins", cglue_trait)]
7#[int_result]
8pub trait OsKeyboard: Send {
9    #[wrap_with_obj(crate::os::keyboard::Keyboard)]
10    type KeyboardType<'a>: crate::os::keyboard::Keyboard + 'a
11    where
12        Self: 'a;
13    #[wrap_with_group(crate::os::keyboard::IntoKeyboard)]
14    type IntoKeyboardType: crate::os::keyboard::Keyboard + Clone + 'static;
15
16    fn keyboard(&mut self) -> Result<Self::KeyboardType<'_>>;
17    fn into_keyboard(self) -> Result<Self::IntoKeyboardType>;
18}
19
20#[cfg(feature = "plugins")]
21cglue_trait_group!(IntoKeyboard, { Keyboard, Clone }, {});
22
23#[cfg_attr(feature = "plugins", cglue_trait)]
24#[int_result]
25#[cglue_forward]
26pub trait Keyboard {
27    #[wrap_with_obj(crate::os::keyboard::KeyboardState)]
28    type KeyboardStateType: crate::os::keyboard::KeyboardState;
29
30    fn is_down(&mut self, vk: i32) -> bool;
31    fn set_down(&mut self, vk: i32, down: bool);
32
33    fn state(&mut self) -> Result<Self::KeyboardStateType>;
34}
35
36#[cfg_attr(feature = "plugins", cglue_trait)]
37#[int_result]
38#[cglue_forward]
39pub trait KeyboardState {
40    fn is_down(&self, vk: i32) -> bool;
41}