macro_rules! error_message {
    ($fmt:literal $($tt:tt)*) => { ... };
    ($span:expr, $fmt:literal $($tt:tt)*) => { ... };
}
Expand description

Creates an ErrorMessage, comparable to the anyhow! macro

If the first argument is not a literal it is taken as the span of the error. The span expression can either implement SpanRanged or implement ToTokens. Otherwise, Span::call_site is used.

assert_eq!(
    error_message!("format {} string{named}", "<3", named = "!").to_string(),
    "format <3 string!"
);
// Span can either be `proc_macro::Span` or `proc_macro2::Span`
assert_eq!(
    error_message!(Span::call_site(), "spanned error").to_string(),
    "spanned error"
);
// Or any expression implementing `quote::ToTokens`
assert_eq!(
    error_message!(quote!(some tokens), "spanned error").to_string(),
    "spanned error"
);

On top of the standard format_args! parameters additional attachments can be specified delimited with ;.

assert_eq!(
    error_message!(
        "format {} string{named}", "<3", named = "!";
        error = "some additional error";
        info = "some info as well";
        custom_attachment = "amazing"
    ).to_string(),
    "format <3 string!

  = error: some additional error
  = info: some info as well
  = custom_attachment: amazing
"
);