#[derive(Debug)]
pub enum PipelineError {
Malformed,
InvalidTransformation(String),
Misc,
}
pub type Result<T> = std::result::Result<T, PipelineError>;
#[macro_export]
macro_rules! hamon {
($msg:expr) => {
PipelineError::InvalidTransformation($msg.into())
};
($fmt:expr, $($arg:tt)*) => {
PipelineError::InvalidTransformation(format!($fmt, $($arg)*))
};
}
pub trait Context<T> {
fn step_err(self, msg: String) -> Result<T>;
}
impl<T, E> Context<T> for std::result::Result<T, E> {
fn step_err(self, msg: String) -> Result<T> {
self.map_err(|_| hamon!(msg))
}
}