use thiserror::Error;
pub type Result<T> = std::result::Result<T, Error>;
#[derive(Error, Debug)]
pub enum Error {
#[error("grammar error: {0}")]
Grammar(String),
#[error("generation error: {0}")]
Generation(String),
#[error("mutation error: {0}")]
Mutation(String),
#[error("transpile error: {0}")]
Transpile(String),
#[error("verification error: {0}")]
Verification(String),
#[error("execution timeout after {0}ms")]
Timeout(u64),
#[error("runtime error in {phase}: {message}")]
Runtime {
phase: String,
message: String,
},
#[error("io error: {0}")]
Io(#[from] std::io::Error),
#[error("serialization error: {0}")]
Serialization(String),
#[error("configuration error: {0}")]
Configuration(String),
#[error("data error: {0}")]
Data(String),
}