ferrous_serialport/posix/
error.rs

1use std::io;
2
3use crate::{Error, ErrorKind};
4
5#[cfg(all(target_os = "linux", not(target_env = "musl"), feature = "libudev"))]
6impl From<libudev::Error> for Error {
7    fn from(e: libudev::Error) -> Error {
8        let description = e.description().to_string();
9        match e.kind() {
10            libudev::ErrorKind::NoMem => Error::new(ErrorKind::Unknown, description),
11            libudev::ErrorKind::InvalidInput => Error::new(ErrorKind::InvalidInput, description),
12            libudev::ErrorKind::Io(a) => Error::new(ErrorKind::Io(a), description),
13        }
14    }
15}
16
17impl From<nix::Error> for Error {
18    fn from(e: nix::Error) -> Error {
19        match e {
20            nix::Error::InvalidPath | nix::Error::InvalidUtf8 => {
21                Error::new(ErrorKind::InvalidInput, "Invalid input")
22            }
23            nix::Error::UnsupportedOperation => Error::new(ErrorKind::Unknown, "Unknown error"),
24            nix::Error::Sys(e @ nix::errno::Errno::ETIMEDOUT) => {
25                Error::new(ErrorKind::Io(io::ErrorKind::TimedOut), e.desc())
26            }
27            nix::Error::Sys(e @ nix::errno::Errno::ECONNABORTED) => {
28                Error::new(ErrorKind::Io(io::ErrorKind::ConnectionAborted), e.desc())
29            }
30            nix::Error::Sys(e @ nix::errno::Errno::ECONNRESET) => {
31                Error::new(ErrorKind::Io(io::ErrorKind::ConnectionReset), e.desc())
32            }
33            nix::Error::Sys(e @ nix::errno::Errno::ECONNREFUSED) => {
34                Error::new(ErrorKind::Io(io::ErrorKind::ConnectionRefused), e.desc())
35            }
36            nix::Error::Sys(e @ nix::errno::Errno::ENOTCONN) => {
37                Error::new(ErrorKind::Io(io::ErrorKind::NotConnected), e.desc())
38            }
39            nix::Error::Sys(e @ nix::errno::Errno::EADDRINUSE) => {
40                Error::new(ErrorKind::Io(io::ErrorKind::AddrInUse), e.desc())
41            }
42            nix::Error::Sys(e @ nix::errno::Errno::EADDRNOTAVAIL) => {
43                Error::new(ErrorKind::Io(io::ErrorKind::AddrNotAvailable), e.desc())
44            }
45            nix::Error::Sys(e @ nix::errno::Errno::EAGAIN) => {
46                Error::new(ErrorKind::Io(io::ErrorKind::WouldBlock), e.desc())
47            }
48            nix::Error::Sys(e @ nix::errno::Errno::EINTR) => {
49                Error::new(ErrorKind::Io(io::ErrorKind::Interrupted), e.desc())
50            }
51            nix::Error::Sys(e @ nix::errno::Errno::EACCES) => {
52                Error::new(ErrorKind::Io(io::ErrorKind::PermissionDenied), e.desc())
53            }
54            nix::Error::Sys(e @ nix::errno::Errno::ENOENT) => {
55                Error::new(ErrorKind::Io(io::ErrorKind::NotFound), e.desc())
56            }
57            nix::Error::Sys(e) => Error::new(ErrorKind::Unknown, e.desc()),
58        }
59    }
60}