disperror
Displaying errors instead of Debugging them when returned from main.
Usage
Simply wrap your error type MyError in a DispError:
- fn main() -> Result<(), MyError> {
+ use disperror::DispError;
+ fn main() -> Result<(), DispError<MyError>> {
Note that MyError must implement std::error::Error.
Example
use DispError;
Should Display the following error message if that file does not exist:
Error: No such file or directory (os error 2)
Instead of the usual Debug output:
Error: Os { code: 2, kind: NotFound, message: "No such file or directory" }
Implementation
The DispError type is a simple wrapper around an error type E that implements std::error::Error:
use Error;
The Debug implementation of DispError forwards to the Display implementation of the inner error:
use ;
#
#
In addition, DispError implements From<E> for implicit conversion:
# use ;
#
#
In this way, when an error of type E is returned from main, it is automatically converted to a DispError<E>. When the Err variant of a Result is returned from main, the Debug implementation is used to print the error message, thus forwarding to the Display implementation of the inner error.
Notes
This project is heavily inspired by main_error. If you're working with Box<dyn std::error::Error> in your main function, use main_error instead. Here's a quick comparison:
disperror |
main_error |
|
|---|---|---|
| Library size | Tiny | Small |
| Overhead | None | Negligible |
| Dynamic dispatch | ✘ | ✔ |
| Usage | DispError<E> |
MainError |