use miette::Diagnostic;
use thiserror::Error;
pub type CliResult<T> = Result<T, CliError>;
#[derive(Error, Debug, Diagnostic)]
pub enum CliError {
#[error("IO error: {0}")]
#[diagnostic(code(prax::io))]
Io(#[from] std::io::Error),
#[error("Configuration error: {0}")]
#[diagnostic(code(prax::config))]
Config(String),
#[error("Schema error: {0}")]
#[diagnostic(code(prax::schema))]
Schema(String),
#[error("Validation error: {0}")]
#[diagnostic(code(prax::validation))]
Validation(String),
#[error("Migration error: {0}")]
#[diagnostic(code(prax::migration))]
Migration(String),
#[error("Database error: {0}")]
#[diagnostic(code(prax::database))]
Database(String),
#[error("Command error: {0}")]
#[diagnostic(code(prax::command))]
Command(String),
#[error("Format error: {0}")]
#[diagnostic(code(prax::format))]
Format(String),
#[error("Codegen error: {0}")]
#[diagnostic(code(prax::codegen))]
Codegen(String),
}
impl From<toml::de::Error> for CliError {
fn from(err: toml::de::Error) -> Self {
CliError::Config(format!("Failed to parse TOML: {}", err))
}
}
impl From<toml::ser::Error> for CliError {
fn from(err: toml::ser::Error) -> Self {
CliError::Config(format!("Failed to serialize TOML: {}", err))
}
}