use snafu::Snafu;
use std::path::PathBuf;
pub type Result<T> = std::result::Result<T, ImageCliError>;
#[allow(missing_docs)]
#[derive(Debug, Snafu)]
#[snafu(visibility(pub(crate)))]
pub enum ImageCliError {
#[snafu(display("Unable to open image '{}': {}", path.display(), source))]
ImageOpenError {
path: PathBuf,
source: image::ImageError,
},
#[snafu(display("Unable to save image to '{}': {}", path.display(), source))]
ImageSaveError {
path: PathBuf,
source: std::io::Error,
},
#[snafu(display("{}: {}", context, source))]
IoError {
context: String,
source: std::io::Error,
},
FmtError { source: std::fmt::Error },
#[snafu(display(
"Unable to parse pipeline.\n\nConsumed: '{}'\nRemaining: '{}'\n\nThe error is likely near the start of the remaining (unparsed) text.",
consumed,
remaining)
)]
PipelineParseError { consumed: String, remaining: String },
#[snafu(display("Invalid glob pattern '{}'. {}", pattern, source))]
GlobPatternError {
pattern: String,
source: glob::PatternError,
},
#[snafu(display("Error iterating glob results. Path: {:?}. Error: {}", source.path(), source.error()))]
GlobIterationError { source: glob::GlobError },
#[snafu(display("Invalid output path or pattern: {}", error))]
OutputPathError { error: String },
#[snafu(display("{}", context))]
InvalidArgError { context: String },
}
impl From<std::fmt::Error> for ImageCliError {
fn from(error: std::fmt::Error) -> Self {
ImageCliError::FmtError { source: error }
}
}