rust-errkit 0.1.0

Idiomatic Rust error handling kit
Documentation
use rust_errkit::{
    AppError,
    kind::{ErrorKind, ErrorReason},
};

#[derive(Debug)]
struct DbError {
    msg: String,
}

fn fake_db_call() -> Result<String, DbError> {
    Err(DbError {
        msg: "unique constraint violation".to_string(),
    })
}

fn map_db_error(e: DbError) -> AppError {
    AppError::from(ErrorKind::db(ErrorReason::Unexpected)).with_context("sqlx", Some(e.msg))
}

fn main() {
    let result = fake_db_call().map_err(map_db_error);

    match result {
        Ok(v) => println!("{}", v),
        Err(e) => {
            println!("MESSAGE: {}", e.kind.message());

            if let Some(ctx) = e.context {
                println!("DEBUG: {:?}", ctx.details);
            }
        }
    }
}