Crate context_attr

Source
Expand description

Add a context to the result returned from the annotated function, regardless of return path.

#[context_attr::anyhow("Doing thing")]
fn do_thing() -> anyhow::Result<()> {
  if true {
    anyhow::bail!("Can't do thing");
  }
  anyhow::bail!("Another error path");
}

This is most useful when there are multiple error points in a function, and annotating the context of the function at each point adds too much noise.

§Format

You can call std::format to include function arguments in the message.

#[context_attr::anyhow(format!("The number: {x}"))]
fn add_one(x: u32) -> anyhow::Result<()> { todo!() }

Note: that the format string is eagerly created at the beginning of the function. There currently isn’t a way around this, as arguments to the function may be moved.

§Works with

The annotation works with:

  • Async functions
  • Functions in impl blocks

Attribute Macros§

anyhow
Add the provided context to an anyhow::Result.