2016-04-30 16:54:13 -04:00
|
|
|
use std::fmt;
|
|
|
|
use std::error;
|
2016-04-24 22:32:24 -04:00
|
|
|
use std::ffi;
|
2017-11-15 00:03:42 -05:00
|
|
|
use std::io;
|
2019-10-07 01:24:29 -04:00
|
|
|
|
|
|
|
#[cfg(target_os = "linux")]
|
2016-04-24 22:32:24 -04:00
|
|
|
use nix;
|
|
|
|
|
2016-04-25 11:57:45 -04:00
|
|
|
/// UInput error.
|
2016-04-24 22:32:24 -04:00
|
|
|
#[derive(Debug)]
|
|
|
|
pub enum Error {
|
2016-04-25 11:57:45 -04:00
|
|
|
/// System errors.
|
2019-10-07 01:24:29 -04:00
|
|
|
#[cfg(target_os = "linux")]
|
2016-04-24 22:32:24 -04:00
|
|
|
Nix(nix::Error),
|
2016-04-25 11:57:45 -04:00
|
|
|
|
|
|
|
/// Errors with internal nulls in names.
|
2016-04-24 22:32:24 -04:00
|
|
|
Nul(ffi::NulError),
|
|
|
|
|
2017-11-15 00:03:42 -05:00
|
|
|
Io(io::Error),
|
2021-09-23 23:18:33 -04:00
|
|
|
|
2021-09-25 00:42:46 -04:00
|
|
|
#[cfg(feature = "toml_serde")]
|
2021-09-23 23:18:33 -04:00
|
|
|
Toml(toml::de::Error),
|
2017-11-15 00:03:42 -05:00
|
|
|
|
2021-09-23 23:18:33 -04:00
|
|
|
NotAKeyboard,
|
|
|
|
|
2017-11-15 00:03:42 -05:00
|
|
|
/// error reading input_event
|
|
|
|
ShortRead,
|
2021-09-23 23:18:33 -04:00
|
|
|
|
|
|
|
/// epoll already added
|
|
|
|
EpollAlreadyAdded,
|
2016-04-24 22:32:24 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
impl From<ffi::NulError> for Error {
|
|
|
|
fn from(value: ffi::NulError) -> Self {
|
|
|
|
Error::Nul(value)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-10-07 01:24:29 -04:00
|
|
|
#[cfg(target_os = "linux")]
|
2016-04-24 22:32:24 -04:00
|
|
|
impl From<nix::Error> for Error {
|
|
|
|
fn from(value: nix::Error) -> Self {
|
|
|
|
Error::Nix(value)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-11-15 00:03:42 -05:00
|
|
|
impl From<io::Error> for Error {
|
|
|
|
fn from(value: io::Error) -> Self {
|
|
|
|
Error::Io(value)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-04-30 16:54:13 -04:00
|
|
|
impl fmt::Display for Error {
|
|
|
|
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
|
|
|
|
match self {
|
2019-10-07 01:24:29 -04:00
|
|
|
#[cfg(target_os = "linux")]
|
2020-07-11 00:09:43 -04:00
|
|
|
&Error::Nix(ref err) => err.fmt(f),
|
2016-04-30 16:54:13 -04:00
|
|
|
|
2020-07-11 00:09:43 -04:00
|
|
|
&Error::Nul(ref err) => err.fmt(f),
|
2016-04-30 16:54:13 -04:00
|
|
|
|
2020-07-11 00:09:43 -04:00
|
|
|
&Error::Io(ref err) => err.fmt(f),
|
2021-09-25 00:42:46 -04:00
|
|
|
|
|
|
|
#[cfg(feature = "toml_serde")]
|
2021-09-23 23:18:33 -04:00
|
|
|
&Error::Toml(ref err) => err.fmt(f),
|
|
|
|
|
|
|
|
&Error::NotAKeyboard => f.write_str("This device file is not a keyboard"),
|
2017-11-15 00:03:42 -05:00
|
|
|
|
2020-07-11 00:09:43 -04:00
|
|
|
&Error::ShortRead => f.write_str("Error while reading from device file."),
|
2021-09-23 23:18:33 -04:00
|
|
|
|
|
|
|
&Error::EpollAlreadyAdded => f.write_str("epoll already added, delete first"),
|
2016-04-30 16:54:13 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2020-07-11 00:09:43 -04:00
|
|
|
|
|
|
|
impl error::Error for Error {}
|