use std::fmt;
#[derive(Debug)]
pub enum WriteError {
Fatal(anyhow::Error),
CanRetry(anyhow::Error),
}
impl fmt::Display for WriteError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
WriteError::Fatal(e) => write!(f, "fatal error in Output::write: {e}"),
WriteError::CanRetry(e) => write!(f, "writing failed (but could work later): {e}"),
}
}
}
impl<T: Into<anyhow::Error>> From<T> for WriteError {
fn from(value: T) -> Self {
Self::Fatal(value.into())
}
}
pub trait WriteRetry<T> {
fn retry_write(self) -> Result<T, WriteError>;
}
impl<T, E: Into<anyhow::Error>> WriteRetry<T> for Result<T, E> {
fn retry_write(self) -> Result<T, WriteError> {
self.map_err(|e| WriteError::CanRetry(e.into()))
}
}