From cd6e41862cea59ec306e7c9c578270575eb2a73b Mon Sep 17 00:00:00 2001 From: Daniel Mueller Date: Sun, 26 Mar 2017 17:07:56 -0700 Subject: Import subrepo hid/:hid at 3ac1005fe3e874bef850ab733fe1a09bc36b91c5 --- hid/src/error.rs | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 hid/src/error.rs (limited to 'hid/src/error.rs') 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 = ::std::result::Result; + +impl From 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, + } + } +} -- cgit v1.2.1