summaryrefslogtreecommitdiff
path: root/hid/src/error.rs
diff options
context:
space:
mode:
authorDaniel Mueller <deso@posteo.net>2017-03-26 17:07:56 -0700
committerDaniel Mueller <deso@posteo.net>2017-03-26 17:07:56 -0700
commitcd6e41862cea59ec306e7c9c578270575eb2a73b (patch)
tree1ee556e55face6290f6646f544282d3319fc6b35 /hid/src/error.rs
parent654b2e5fa1566f0479b09adf2d73f783196ad032 (diff)
downloadnitrocli-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.rs62
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,
+ }
+ }
+}