use std::convert::From;
use std::error::Error;
use std::fmt::Display;
use crate::error::InternalError;
use crate::error::ResourceTemporarilyUnavailableError;
#[derive(Debug)]
pub enum NodeIdStoreError {
InternalError(InternalError),
ResourceTemporarilyUnavailableError(ResourceTemporarilyUnavailableError),
}
impl Display for NodeIdStoreError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
NodeIdStoreError::InternalError(e) => e.fmt(f),
NodeIdStoreError::ResourceTemporarilyUnavailableError(e) => e.fmt(f),
}
}
}
impl Error for NodeIdStoreError {
fn source(&self) -> Option<&(dyn Error + 'static)> {
match self {
NodeIdStoreError::InternalError(e) => Some(e),
NodeIdStoreError::ResourceTemporarilyUnavailableError(e) => Some(e),
}
}
}
#[cfg(feature = "diesel")]
impl From<diesel::result::Error> for NodeIdStoreError {
fn from(err: diesel::result::Error) -> Self {
Self::InternalError(InternalError::from_source(Box::new(err)))
}
}
#[cfg(feature = "diesel")]
impl From<diesel::r2d2::PoolError> for NodeIdStoreError {
fn from(err: diesel::r2d2::PoolError) -> Self {
Self::ResourceTemporarilyUnavailableError(ResourceTemporarilyUnavailableError::from_source(
Box::new(err),
))
}
}
impl From<std::io::Error> for NodeIdStoreError {
fn from(err: std::io::Error) -> Self {
Self::InternalError(InternalError::from_source(Box::new(err)))
}
}
impl From<InternalError> for NodeIdStoreError {
fn from(err: InternalError) -> Self {
Self::InternalError(err)
}
}