use std::fmt;
use tokio::sync::{mpsc, oneshot};
#[derive(Debug, PartialEq, Eq, Clone)]
pub enum Error {
NotFound,
InUse,
DeviceDefined(String),
MissingPeer(String),
TypeError,
InvArgument(String),
BackendError(String),
ProtocolError(String),
AuthenticationError,
TimeoutError,
OperationError(String),
ConfigError(String),
ParseError(String),
}
impl std::error::Error for Error {}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
Error::NotFound => write!(f, "item not found"),
Error::InUse => write!(f, "item is in use"),
Error::DeviceDefined(name) => {
write!(f, "device {} is already defined", &name)
}
Error::MissingPeer(detail) => {
write!(f, "{} is missing peer", detail)
}
Error::TypeError => write!(f, "incorrect type"),
Error::InvArgument(v) => write!(f, "{}", &v),
Error::BackendError(v) => {
write!(f, "backend error: {}", &v)
}
Error::ProtocolError(v) => write!(f, "protocol error: {}", &v),
Error::AuthenticationError => write!(f, "permission error"),
Error::TimeoutError => write!(f, "timeout"),
Error::OperationError(v) => {
write!(f, "couldn't complete operation: {}", &v)
}
Error::ConfigError(v) => write!(f, "config error: {}", &v),
Error::ParseError(v) => write!(f, "parse error: {}", &v),
}
}
}
impl<T> From<mpsc::error::SendError<T>> for Error {
fn from(_error: mpsc::error::SendError<T>) -> Self {
Error::MissingPeer(String::from("request channel is closed"))
}
}
impl From<oneshot::error::RecvError> for Error {
fn from(_error: oneshot::error::RecvError) -> Self {
Error::MissingPeer(String::from("request dropped"))
}
}
pub mod device;