use crate::error::WriteError;
use ecow::EcoString;
pub trait ErrorContext<T> {
fn with_context<S: Into<EcoString>>(self, context: S) -> Result<T, WriteError>;
fn with_context_fn<F, S>(self, f: F) -> Result<T, WriteError>
where
F: FnOnce() -> S,
S: Into<EcoString>;
}
pub trait ErrorFactory<E> {
fn create_error(&self) -> E;
fn create_error_with_context<S: Into<EcoString>>(&self, _context: S) -> E {
self.create_error()
}
}
pub trait ConfigurableProcessor {
type Config;
fn configure(&mut self, config: Self::Config);
fn config(&self) -> &Self::Config;
}
impl<T> ErrorContext<T> for Result<T, WriteError> {
fn with_context<S: Into<EcoString>>(self, context: S) -> Result<T, WriteError> {
self.map_err(|e| {
let context_str = context.into();
WriteError::custom(format!("{}: {}", context_str, e))
})
}
fn with_context_fn<F, S>(self, f: F) -> Result<T, WriteError>
where
F: FnOnce() -> S,
S: Into<EcoString>,
{
self.map_err(|e| {
let context_str = f().into();
WriteError::custom(format!("{}: {}", context_str, e))
})
}
}