1#[derive(thiserror::Error, Debug, PartialEq, Eq)]
2pub enum Error {
3 #[error("USB error")]
4 Usb(#[from] rusb::Error),
5
6 #[error("no acknowledgement from the i2c device")]
7 Nack,
8}
9
10pub type Result<T> = std::result::Result<T, Error>;
11
12impl From<Error> for std::io::Error {
13 fn from(value: Error) -> Self {
14 use std::io::ErrorKind;
15 match value {
16 Error::Usb(rusb::Error::InvalidParam) => ErrorKind::InvalidInput.into(),
17 Error::Usb(rusb::Error::Access) => ErrorKind::PermissionDenied.into(),
18 Error::Usb(rusb::Error::NoDevice) => ErrorKind::ConnectionRefused.into(),
19 Error::Usb(rusb::Error::NotFound) => ErrorKind::Unsupported.into(),
20 Error::Usb(rusb::Error::Busy) => ErrorKind::ResourceBusy.into(),
21 Error::Usb(rusb::Error::Timeout) => ErrorKind::TimedOut.into(),
22 Error::Usb(rusb::Error::Pipe) => ErrorKind::BrokenPipe.into(),
23 Error::Usb(rusb::Error::Interrupted) => ErrorKind::Interrupted.into(),
24 Error::Usb(rusb::Error::NoMem) => ErrorKind::OutOfMemory.into(),
25 Error::Usb(rusb::Error::NotSupported) => ErrorKind::InvalidInput.into(),
26 Error::Usb(_) => ErrorKind::Other.into(),
27 Error::Nack => ErrorKind::NotConnected.into(),
28 }
29 }
30}
31
32impl From<std::io::Error> for Error {
33 fn from(value: std::io::Error) -> Self {
34 match value.kind() {
35 std::io::ErrorKind::InvalidInput => Error::Usb(rusb::Error::InvalidParam),
36 std::io::ErrorKind::PermissionDenied => Error::Usb(rusb::Error::Access),
37 std::io::ErrorKind::ConnectionRefused => Error::Usb(rusb::Error::NoDevice),
38 std::io::ErrorKind::Unsupported => Error::Usb(rusb::Error::NotFound),
39 std::io::ErrorKind::ResourceBusy => Error::Usb(rusb::Error::Busy),
40 std::io::ErrorKind::TimedOut => Error::Usb(rusb::Error::Timeout),
41 std::io::ErrorKind::BrokenPipe => Error::Usb(rusb::Error::Pipe),
42 std::io::ErrorKind::Interrupted => Error::Usb(rusb::Error::Interrupted),
43 std::io::ErrorKind::OutOfMemory => Error::Usb(rusb::Error::NoMem),
44 std::io::ErrorKind::NotConnected => Error::Nack,
45 _ => Error::Usb(rusb::Error::Other),
46 }
47 }
48}