Crate error_derive [] [src]

This crate provides macros for deriving some useful methods and traits for Error enums.

All of these macros are designed to be used with the custom_derive crate, though they can be used independent of it.


Derive implementation of the standard Error trait. This also provides the requisite Display implementation.

#[macro_use] extern crate custom_derive;
#[macro_use] extern crate error_derive;

custom_derive! {
        ErrorFrom, ErrorDisplay, Error("very bad error"))]
    pub enum Error {

let io_error = Error::Io(io::Error::last_os_error());
let utf8_error = Error::Utf8(from_utf8(&[0, 142]).unwrap_err());

assert_eq!("very bad error", io_error.description());
assert_eq!("very bad error", utf8_error.description());



This crate allows to derive the following traits:

  • ErrorFrom, which creates From trait implementations from each enum variants that wraps an inner Error
  • ErrorDisplay, which creates a Display trait implementation showing the entire causal chain for an error
  • Error, which implements the standard Error trait with a given description

Error and ErrorDisplay are typically derived together, though either can of course be implemented separately.

Usage without custom_derive!

Although designed to be used with custom_derive!, all of the macros in this crate can be used without it. The following:

custom_derive! {
    #[derive(Debug, ErrorDisplay, Error("just I/O error"))]
    pub enum JustIoError { ThisOne(io::Error) }

Can also be writtten as:

pub enum JustIoError { ThisOne(io::Error) }
ErrorDisplay! { () pub enum JustIoError { ThisOne(io::Error) } }
Error! { ("just I/O error") pub enum JustIoError { ThisOne(io::Error) } }