use crate::transport::error::TransportError;
use crate::{Errorizable, TightBeamError};
#[derive(Errorizable, Debug)]
pub enum HiveError {
#[error("Invalid servlet ID: {:#?}")]
InvalidServletId(Vec<u8>),
#[error("IO error: {0}")]
#[from]
#[source]
Io(std::io::Error),
#[error("Transport error: {0}")]
#[from]
#[source]
Transport(TransportError),
#[error("Frame error: {0}")]
#[source]
Frame(Box<TightBeamError>),
#[error("Message emission failed")]
EmitFailed,
#[error("No response received")]
NoResponse,
#[error("Message decoding failed")]
DecodeFailed,
#[error("Lock poisoned")]
LockPoisoned,
#[error("No trusted keys configured")]
NoTrustedKeys,
}
impl<T> From<std::sync::PoisonError<T>> for HiveError {
fn from(_: std::sync::PoisonError<T>) -> Self {
HiveError::LockPoisoned
}
}
impl From<TightBeamError> for HiveError {
fn from(e: TightBeamError) -> Self {
HiveError::Frame(Box::new(e))
}
}