Skip to main content

Crate macron_impl_error

Crate macron_impl_error 

Source
Expand description

githubcrates-iodocs-rs

§Impl Error Macro

§Introduction:

The implementation of trait Error.

See more macros: docs, repository.

§Examples:

§Struct

#[derive(Debug, Error)]
struct Error {
    source: Option<Box<dyn std::error::Error>>,
}

impl ::std::fmt::Display for Error {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        write!(f, "it's my custom error")
    }
}

let err = Error { source: None };
assert_eq!(format!("{err}"), "it's my custom error");

§Enum

#[derive(Debug, Error)]
enum Error {
    WithAnySource {
        source: Option<Box<dyn std::error::Error>>,
        msg: String,
    },

    WithCertainSource(#[source] Box<SourceError>),

    WithoutSource,

    WithoutSource2(String, String),
}

impl ::std::fmt::Display for Error {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        match &self {
            Self::WithAnySource { source, msg } => write!(
                f,
                "the error with a message: '{msg}' and a source: '{src}'",
                src = if let Some(src) = source.as_deref() {
                    src.to_string()
                } else {
                    "no source".to_owned()
                }
            ),
            Self::WithCertainSource(src) => write!(f, "the error with the source: '{src}'"),
            Self::WithoutSource => write!(f, "the error without a source"),
            Self::WithoutSource2(_, _) => write!(f, "the error without source"),
        }
    }
}

#[derive(Debug, Error)]
enum SourceError {
    Error,
}

impl ::std::fmt::Display for SourceError {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        match &self {
            Self::Error => write!(f, "the source of error"),
        }
    }
}

let err = Error::WithAnySource {
    source: Some(Box::new(SourceError::Error)),
    msg: "the message of error".to_owned(),
};
let err2 = Error::WithCertainSource(SourceError::Error.into());
let err3 = Error::WithoutSource;

assert_eq!(
    format!("{err}"),
    "the error with a message: 'the message of error' and a source: 'the source of error'"
);
assert_eq!(
    format!("{err2}"),
    "the error with the source: 'the source of error'"
);
assert_eq!(format!("{err3}"), "the error without a source");

§License & Feedback:

This library distributed under the MIT license.

You can contact me via GitHub or send a message to my E-Mail. This library is actively evolving, and your suggestions and feedback are always welcome!

Derive Macros§

Error
The implementation of trait Error