diff options
Diffstat (limited to 'hid/src/error.rs')
-rw-r--r-- | hid/src/error.rs | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/hid/src/error.rs b/hid/src/error.rs new file mode 100644 index 0000000..367f47f --- /dev/null +++ b/hid/src/error.rs @@ -0,0 +1,62 @@ +use std::ffi::CStr; +use libc::c_int; +use sys::*; +use std::{error, fmt}; + +#[derive(Clone, PartialEq, Eq, Debug)] +pub enum Error { + Initialized, + NotFound, + General, + Write, + Read, + String(String), +} + +pub type Result<T> = ::std::result::Result<T, Error>; + +impl From<c_int> for Error { + fn from(value: c_int) -> Error { + match value { + _ => Error::General + } + } +} + +impl From<*mut hid_device> for Error { + fn from(value: *mut hid_device) -> Error { + unsafe { + Error::String(CStr::from_ptr(hid_error(value) as *const _).to_str().unwrap().to_owned()) + } + } +} + +impl fmt::Display for Error { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.write_str(error::Error::description(self)) + } +} + +impl error::Error for Error { + fn description(&self) -> &str { + match *self { + Error::Initialized => + "Already initialized.", + + Error::NotFound => + "Device not found.", + + Error::General => + "General error.", + + Error::Write => + "Write error.", + + Error::Read => + "Read error.", + + Error::String(ref err) => + err, + } + } +} |