hookmap 0.5.1

Registers hotkeys and simulates keyboard and mouse input.
Documentation
use hookmap_core::button::Button;
use hookmap_core::event::{ButtonEvent, CursorEvent, NativeEventOperation, WheelEvent};

pub(crate) trait Hook<E> {
    fn native_event_operation(&self) -> NativeEventOperation;
    fn run(&self, event: E);
}

pub(crate) trait ButtonState {
    fn is_pressed(&self, button: Button) -> bool;
    fn is_released(&self, button: Button) -> bool;
}

pub(crate) trait HookStorage {
    type ButtonHook: Hook<ButtonEvent>;
    type MouseCursorHook: Hook<CursorEvent>;
    type MouseWheelHook: Hook<WheelEvent>;

    fn fetch_button_hook<S: ButtonState>(
        &self,
        event: ButtonEvent,
        state: &S,
    ) -> Vec<Self::ButtonHook>;

    fn fetch_mouse_cursor_hook<S: ButtonState>(
        &self,
        event: CursorEvent,
        state: &S,
    ) -> Vec<Self::MouseCursorHook>;

    fn fetch_mouse_wheel_hook<S: ButtonState>(
        &self,
        event: WheelEvent,
        state: &S,
    ) -> Vec<Self::MouseWheelHook>;
}