Giter VIP home page Giter VIP logo

Comments (1)

dtolnay avatar dtolnay commented on June 14, 2024 1

I think I am going to stick with the current signature of Context which requires the context argument to be Send + Sync + 'static which fmt::Arguments is not, but one thing you could do is define your own context trait to lazily to_string an argument of type fmt::Arguments. Something like:

use anyhow::{anyhow, Error, Result};
use std::fmt;

trait LazyContext<T, E> {
    fn context(self, args: fmt::Arguments) -> Result<T, Error>;
}

impl<T, E> LazyContext<T, E> for Result<T, E>
where
    Self: anyhow::Context<T, E>,
{
    fn context(self, args: fmt::Arguments) -> Result<T, Error> {
        match self {
            Ok(ok) => Ok(ok),
            Err(_) => anyhow::Context::context(self, args.to_string()),
        }
    }
}

fn main() -> Result<()> {
    fn f(_: usize) -> Result<()> { Err(anyhow!("something wrong")) }

    let id = 0;
    f(id).context(format_args!("failed to fetch id {}", id))?;
    Ok(())
}

Or possibly the same thing generalized to fn context(self, args: impl Display) -> Result<T, Error>.

from anyhow.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.