diff options
author | Daniel Mueller <deso@posteo.net> | 2017-03-26 17:07:56 -0700 |
---|---|---|
committer | Daniel Mueller <deso@posteo.net> | 2017-03-26 17:07:56 -0700 |
commit | cd6e41862cea59ec306e7c9c578270575eb2a73b (patch) | |
tree | 1ee556e55face6290f6646f544282d3319fc6b35 /hid/src/error.rs | |
parent | 654b2e5fa1566f0479b09adf2d73f783196ad032 (diff) | |
download | nitrocli-cd6e41862cea59ec306e7c9c578270575eb2a73b.tar.gz nitrocli-cd6e41862cea59ec306e7c9c578270575eb2a73b.tar.bz2 |
Import subrepo hid/:hid at 3ac1005fe3e874bef850ab733fe1a09bc36b91c5
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, + } + } +} |