#[derive(Clone, PartialEq)]
pub enum OssuaryError {
Io(String),
WouldBlock(usize),
UntrustedServer(Vec<u8>),
Unpack(String),
NoRandomSource,
KeySize(usize, usize),
InvalidKey,
DecryptionFailed,
InvalidPacket(String),
InvalidStruct,
InvalidSignature,
WrongProtocolVersion(u8, u8),
ConnectionReset(usize),
ConnectionFailed,
ConnectionClosed,
}
impl std::fmt::Debug for OssuaryError {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
match self {
OssuaryError::Io(e) => write!(f, "OssuaryError::Io {}", e),
OssuaryError::WouldBlock(_) => write!(f, "OssuaryError::WouldBlock"),
OssuaryError::Unpack(_) => write!(f, "OssuaryError::Unpack"),
OssuaryError::NoRandomSource => write!(f, "OssuaryError::NoRandomSource"),
OssuaryError::KeySize(_,_) => write!(f, "OssuaryError::KeySize"),
OssuaryError::InvalidKey => write!(f, "OssuaryError::InvalidKey"),
OssuaryError::InvalidPacket(m) => write!(f, "OssuaryError::InvalidPacket: {}", m),
OssuaryError::InvalidStruct => write!(f, "OssuaryError::InvalidStruct"),
OssuaryError::InvalidSignature => write!(f, "OssuaryError::InvalidSignature"),
OssuaryError::ConnectionReset(_) => write!(f, "OssuaryError::ConnectionReset"),
OssuaryError::ConnectionFailed => write!(f, "OssuaryError::ConnectionFailed"),
OssuaryError::ConnectionClosed => write!(f, "OssuaryError::ConnectionClosed"),
OssuaryError::UntrustedServer(_) => write!(f, "OssuaryError::UntrustedServer"),
OssuaryError::DecryptionFailed => write!(f, "OssuaryError::DecryptionFailed"),
OssuaryError::WrongProtocolVersion(r,l) => write!(f, "OssuaryError:WrongProtocolVersion {} != {}", r, l),
}
}
}
impl From<std::io::Error> for OssuaryError {
fn from(error: std::io::Error) -> Self {
match error.kind() {
std::io::ErrorKind::WouldBlock => OssuaryError::WouldBlock(0),
_ => OssuaryError::Io(error.to_string()),
}
}
}
impl From<core::array::TryFromSliceError> for OssuaryError {
fn from(error: core::array::TryFromSliceError) -> Self {
OssuaryError::Unpack(error.to_string())
}
}
impl From<ed25519_dalek::SignatureError> for OssuaryError {
fn from(_error: ed25519_dalek::SignatureError) -> Self {
OssuaryError::InvalidSignature
}
}
impl From<chacha20_poly1305_aead::DecryptError> for OssuaryError {
fn from(_error: chacha20_poly1305_aead::DecryptError) -> Self {
OssuaryError::DecryptionFailed
}
}
impl From<rand::Error> for OssuaryError {
fn from(_error: rand::Error) -> Self {
OssuaryError::NoRandomSource
}
}