use crate::Instruction; use crate::ice; use std::io; use std::path::PathBuf; use std::sync::Arc; /// A test error. #[derive(Debug, Clone, thiserror::Error)] pub enum Error { /// No matching widget was found for the [`Selector`](crate::Selector). #[error("no matching widget was found for the selector: {selector}")] NotFound { selector: String }, #[error("the matching target is not visible: {target:?}")] NotVisible { target: Arc, }, /// An IO operation failed. #[error("an IO operation failed: {0}")] IOFailed(Arc), /// The decoding of some PNG image failed. #[error("the decoding of some PNG image failed: {0}")] PngDecodingFailed(Arc), /// The encoding of some PNG image failed. #[error("the encoding of some PNG image failed: {0}")] PngEncodingFailed(Arc), #[error("the ice test ({file}) is invalid: {error}")] IceParsingFailed { file: PathBuf, error: ice::ParseError, }, #[error("the ice test ({file}) failed")] IceFailed { file: PathBuf, instruction: Instruction, }, #[error( "the preset \"{name}\" does not exist (available presets: {available:?})" )] PresetNotFound { name: String, available: Vec, }, } impl From for Error { fn from(error: io::Error) -> Self { Self::IOFailed(Arc::new(error)) } } impl From for Error { fn from(error: png::DecodingError) -> Self { Self::PngDecodingFailed(Arc::new(error)) } } impl From for Error { fn from(error: png::EncodingError) -> Self { Self::PngEncodingFailed(Arc::new(error)) } }