#[allow(unused_imports)]
use error_forge::ForgeError;
#[cfg(feature = "derive")]
use error_forge::ModError;
#[cfg(feature = "derive")]
#[derive(Debug, ModError)]
#[error_prefix = "DATABASE"]
pub enum SimpleDbError {
#[error_display("Connection failed")]
ConnectionFailed,
#[error_display("Query failed: {0}")]
QueryFailed(String),
#[error_display("Transaction failed")]
#[error_retryable]
#[error_http_status(400)]
TransactionFailed,
}
#[cfg(feature = "derive")]
#[derive(Debug, ModError)]
#[error_prefix("Config")]
pub struct SimpleConfigError;
fn main() {
#[cfg(feature = "derive")]
{
let conn_err = SimpleDbError::ConnectionFailed;
let query_err = SimpleDbError::QueryFailed("Syntax error in SQL".to_string());
let tx_err = SimpleDbError::TransactionFailed;
let config_err = SimpleConfigError;
println!("=== Derived Error Examples ===");
println!("\n--- SimpleDbError::ConnectionFailed ---");
println!("Display: {}", conn_err);
println!("Raw display format: '{:?}'", format!("{}", conn_err));
println!("Kind: {}", conn_err.kind());
println!("Caption: {}", conn_err.caption());
println!("Raw caption: '{:?}'", conn_err.caption());
println!("Is retryable: {}", conn_err.is_retryable());
println!("Status code: {}", conn_err.status_code());
println!("\n--- SimpleDbError::QueryFailed ---");
println!("Display: {}", query_err);
println!("Kind: {}", query_err.kind());
println!("Caption: {}", query_err.caption());
println!("Is retryable: {}", query_err.is_retryable());
println!("Status code: {}", query_err.status_code());
println!("\n--- SimpleDbError::TransactionFailed ---");
println!("Display: {}", tx_err);
println!("Kind: {}", tx_err.kind());
println!("Caption: {}", tx_err.caption());
println!("Is retryable: {}", tx_err.is_retryable());
println!("Status code: {}", tx_err.status_code());
println!("\n--- SimpleConfigError ---");
println!("Display: {}", config_err);
println!("Kind: {}", config_err.kind());
println!("Caption: {}", config_err.caption());
println!("Is retryable: {}", config_err.is_retryable());
println!("Status code: {}", config_err.status_code());
}
#[cfg(not(feature = "derive"))]
{
println!("This example requires the 'derive' feature to be enabled.");
println!("Run it with: cargo run --example derive_example --features derive");
}
}