| pub use self::itron::error::{ItronError as SolidError, expect_success}; | |
| use super::{abi, itron}; | |
| use crate::io; | |
| use crate::sys::net; | |
| // SOLID directly maps `errno`s to μITRON error codes. | |
| impl SolidError { | |
| #[inline] | |
| pub(crate) fn as_io_error(self) -> crate::io::Error { | |
| crate::io::Error::from_raw_os_error(self.as_raw()) | |
| } | |
| } | |
| /// Describe the specified SOLID error code. Returns `None` if it's an | |
| /// undefined error code. | |
| /// | |
| /// The SOLID error codes are a superset of μITRON error codes. | |
| pub fn error_name(er: abi::ER) -> Option<&'static str> { | |
| match er { | |
| // Success | |
| er if er >= 0 => None, | |
| er if er < abi::sockets::SOLID_NET_ERR_BASE => net::error_name(er), | |
| abi::SOLID_ERR_NOTFOUND => Some("not found"), | |
| abi::SOLID_ERR_NOTSUPPORTED => Some("not supported"), | |
| abi::SOLID_ERR_EBADF => Some("bad flags"), | |
| abi::SOLID_ERR_INVALIDCONTENT => Some("invalid content"), | |
| abi::SOLID_ERR_NOTUSED => Some("not used"), | |
| abi::SOLID_ERR_ALREADYUSED => Some("already used"), | |
| abi::SOLID_ERR_OUTOFBOUND => Some("out of bounds"), | |
| abi::SOLID_ERR_BADSEQUENCE => Some("bad sequence"), | |
| abi::SOLID_ERR_UNKNOWNDEVICE => Some("unknown device"), | |
| abi::SOLID_ERR_BUSY => Some("busy"), | |
| abi::SOLID_ERR_TIMEOUT => Some("operation timed out"), | |
| abi::SOLID_ERR_INVALIDACCESS => Some("invalid access"), | |
| abi::SOLID_ERR_NOTREADY => Some("not ready"), | |
| _ => itron::error::error_name(er), | |
| } | |
| } | |
| pub fn decode_error_kind(er: abi::ER) -> io::ErrorKind { | |
| match er { | |
| // Success | |
| er if er >= 0 => io::ErrorKind::Uncategorized, | |
| er if er < abi::sockets::SOLID_NET_ERR_BASE => net::decode_error_kind(er), | |
| abi::SOLID_ERR_NOTFOUND => io::ErrorKind::NotFound, | |
| abi::SOLID_ERR_NOTSUPPORTED => io::ErrorKind::Unsupported, | |
| abi::SOLID_ERR_EBADF => io::ErrorKind::InvalidInput, | |
| abi::SOLID_ERR_INVALIDCONTENT => io::ErrorKind::InvalidData, | |
| // abi::SOLID_ERR_NOTUSED | |
| // abi::SOLID_ERR_ALREADYUSED | |
| abi::SOLID_ERR_OUTOFBOUND => io::ErrorKind::InvalidInput, | |
| // abi::SOLID_ERR_BADSEQUENCE | |
| abi::SOLID_ERR_UNKNOWNDEVICE => io::ErrorKind::NotFound, | |
| // abi::SOLID_ERR_BUSY | |
| abi::SOLID_ERR_TIMEOUT => io::ErrorKind::TimedOut, | |
| // abi::SOLID_ERR_INVALIDACCESS | |
| // abi::SOLID_ERR_NOTREADY | |
| _ => itron::error::decode_error_kind(er), | |
| } | |
| } |