use core::fmt::Debug;
use core::fmt::Display;
use core::fmt::Formatter;
use core::fmt::Result;
#[cfg(feature = "std")]
use std::error::Error;
#[allow(dead_code)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum KeyError {
AccessDenied,
QuotaExceeded,
BadAddress,
InvalidArguments,
KeyExpired,
KeyRevoked,
KeyRejected,
KeyringDoesNotExist,
KeyDoesNotExist,
OutOfMemory,
InvalidDescription,
InvalidIdentifier,
OperationNotSupported,
WriteError,
PermissionDenied,
MissingFileOrDirectory,
Unknown(i32),
}
impl Display for KeyError {
#[inline(always)]
fn fmt(&self, f: &mut Formatter) -> Result {
<KeyError as Debug>::fmt(self, f)
}
}
#[cfg(feature = "std")]
impl Error for KeyError {}
impl KeyError {
pub fn from_errno() -> KeyError {
match unsafe { *libc::__errno_location() } {
libc::ENOENT => KeyError::MissingFileOrDirectory,
libc::EPERM => KeyError::PermissionDenied,
libc::EACCES => KeyError::AccessDenied,
libc::EDQUOT => KeyError::QuotaExceeded,
libc::EFAULT => KeyError::BadAddress,
libc::EINVAL => KeyError::InvalidArguments,
libc::EKEYEXPIRED => KeyError::KeyExpired,
libc::EKEYREVOKED => KeyError::KeyRevoked,
libc::EKEYREJECTED => KeyError::KeyRejected,
libc::ENOMEM => KeyError::OutOfMemory,
libc::ENOKEY => KeyError::KeyDoesNotExist,
libc::ENOTSUP => KeyError::OperationNotSupported,
x => KeyError::Unknown(x),
}
}
}