#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("daemon did not understand request")]
UnknownRequest,
#[error("unknown key")]
UnknownKey,
#[error("key already exists")]
KeyExists,
#[error("user did not authenticate")]
UserDenied,
#[error("general failure in daemon backend")]
GeneralFailure,
#[error("unknown status {0} returned by daemon")]
UnknownStatus(u8),
#[error("invalid data")]
InvalidData,
#[error("invalid signature")]
InvalidSignature,
#[error("unsupported algorithm")]
UnsupportedAlgorithm,
#[error("i/o error")]
Other(#[from] std::io::Error)
}
impl Error {
pub fn from_status(n: u8) -> Result<()> {
use crate::status::*;
match n {
SUCCESS => Ok(()),
UNKNOWN_REQUEST => Err(Self::UnknownRequest),
UNKNOWN_KEY => Err(Self::UnknownKey),
KEY_EXISTS => Err(Self::KeyExists),
USER_DENIED => Err(Self::UserDenied),
GENERAL_FAILURE => Err(Self::GeneralFailure),
INVALID_KEY => Err(Self::InvalidData),
UNSUPPORTED_KEY => Err(Self::UnsupportedAlgorithm),
_ => Err(Self::UnknownStatus(n))
}
}
}
pub type Result<T> = std::result::Result<T, Error>;