auto-context

Crates.ioauto-context
lib.rsauto-context
version0.1.1
created_at2025-02-02 16:45:36.647449+00
updated_at2025-02-02 17:02:43.152535+00
descriptionAuto-add context to anyhow errors (without nightly)
homepage
repositoryhttps://github.com/enricozb/auto-context
max_upload_size
id1539701
size6,124
Enrico Borba (enricozb)

documentation

README

auto-context

Auto-add context to anyhow errors (without nightly).

Example

use anyhow::{Context, Result};

struct Test {}

#[auto_context::auto_context]
impl Test {
  fn some_method(self) -> Result<()> {
    anyhow::bail!("some error")
  }

  fn some_function(_: i32) -> Result<()> {
    Test {}.some_method()?;

    Ok(())
  }
}

#[auto_context::auto_context]
fn main() -> Result<()> {
  Test::some_function(123)?;

  Ok(())
}

fails with

Error: Test::some_function(..) @ auto-context/src/lib.rs::23

Caused by:
    0: .some_method() @ auto-context/src/lib.rs::15
    1: some error

Details

The auto_context proc macro can be used to annotate any item. This includes functions, methods, and struct/trait impls.

Context is added to every [try expression] (every use of a ?). Different kinds of expressions result in different context formats:

  • method calls: .method_name(args)
  • function calls: some::func(args)
  • identifiers: xyz
  • expression calls: (.. some expr ..)

where args is .. if arguments are present and is empty otherwise.

Commit count: 4

cargo fmt