[−][src]Crate error_rules
Intro
Key feature of the error-rules is chained error handling.
Idea is simple, each module has own error handler. Source error wrapped into error handler with configurable display text.
Declaring error types
Macro error_rules! implements Error, Result types and all necessary traits for Error.
All arguments should be comma-separated.
To prevent types shadowing all errors from standard library and other crates should be used
with module name. For example: io::Error.
Display format
Error display text defines in tuple after Error => keyword.
First tuple argument is a format string. Additional arguments:
error- chained error text
use error_rules::*; error_rules! { Error => ("app error => {}", error) } assert_eq!( Error::from("error message").to_string().as_str(), "app error => error message");
Error types
After display text you could define error types for conversions into Error chain.
By the default implements conversion for: &str, String
use std::io; use error_rules::*; error_rules! { Error => ("app error => {}", error), std::io::Error, } let io_error = io::Error::new(io::ErrorKind::Other, "io-error"); assert_eq!( Error::from(io_error).to_string().as_str(), "app error => io-error");
Custom error types
Custom errors is an additional error kind to use with Error.
Defines like struct with display arguments after => keyword.
Could be defined without fields:
error_rules! { Error => ("app error => {}", error), CustomError => ("custom error"), } assert_eq!( Error::from(CustomError).to_string().as_str(), "app error => custom error");
or with fields:
error_rules! { Error => ("app error => {}", error), CustomError(usize) => ("custom error value:{}", 0), } assert_eq!( Error::from(CustomError(100)).to_string().as_str(), "app error => custom error value:100");
or with named fields:
error_rules! { Error => ("app error => {}", error), CustomError { value: usize, } => ("custom error value:{}", value), } assert_eq!( Error::from(CustomError { value: 100 }).to_string().as_str(), "app error => custom error value:100");
Macros
| bail | Exits a function and returns Error |
| ensure | Ensure that a boolean expression is true at runtime.
If condition is false then invokes |
| error_rules | Macro for chained error handling |