Documentation
use std::time::Duration;

pub mod linux_keyboard;

#[derive(Debug)]
pub enum Error {
    IoError(std::io::Error),
    KeyboardPoisoned(linux_keyboard::KeyboardPoisonError),
    BroadcastPoisoned,
}

pub trait Keyboard 
{
    fn tap(&self, key_code: u16) -> impl Future<Output = Result<()>>;
    fn tap_with_delay(&self, key_code: u16, delay: Duration) -> impl Future<Output = Result<()>>;
    fn press(&self, key_code: u16) -> impl Future<Output = Result<()>>;
    fn release(&self, key_code: u16) -> impl Future<Output = Result<()>>;
}

type Result<T> = core::result::Result<T, Error>;