• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use std::io;
2 
3 use crate::{Error, ErrorKind};
4 
5 #[cfg(all(target_os = "linux", not(target_env = "musl"), feature = "libudev"))]
6 impl From<libudev::Error> for Error {
from(e: libudev::Error) -> Error7     fn from(e: libudev::Error) -> Error {
8         use libudev::ErrorKind as K;
9         let kind = match e.kind() {
10             K::NoMem => ErrorKind::Unknown,
11             K::InvalidInput => ErrorKind::InvalidInput,
12             K::Io(a) => ErrorKind::Io(a),
13         };
14         Error::new(kind, e.description())
15     }
16 }
17 
18 impl From<nix::Error> for Error {
from(e: nix::Error) -> Error19     fn from(e: nix::Error) -> Error {
20         use io::ErrorKind as IO;
21         use nix::errno::Errno as E;
22         use ErrorKind as K;
23         let kind = match e {
24             E::ETIMEDOUT => K::Io(IO::TimedOut),
25             E::ECONNABORTED => K::Io(IO::ConnectionAborted),
26             E::ECONNRESET => K::Io(IO::ConnectionReset),
27             E::ECONNREFUSED => K::Io(IO::ConnectionRefused),
28             E::ENOTCONN => K::Io(IO::NotConnected),
29             E::EADDRINUSE => K::Io(IO::AddrInUse),
30             E::EADDRNOTAVAIL => K::Io(IO::AddrNotAvailable),
31             E::EAGAIN => K::Io(IO::WouldBlock),
32             E::EINTR => K::Io(IO::Interrupted),
33             E::EACCES => K::Io(IO::PermissionDenied),
34             E::ENOENT => K::Io(IO::NotFound),
35             _ => K::Unknown,
36         };
37         Error::new(kind, e.desc())
38     }
39 }
40