Skip to content

Improve #[from] documentation example. #135

Open

Description

@Shaddy

Hey folks,

There is an issue that took me a while to understand, and it's that in the lib doc is not very clear how to display the error that is being derived with #[from] macro.

The actual example is e.g.

    #[error("data store disconnected")]
    Disconnect(#[from] io::Error)

Despite there is also an example of how to use from attribute over a struct field e.g.

#[derive(Error, Debug)]
pub enum MyError {
    Io {
        #[from]
        source: io::Error,
        backtrace: Backtrace,
    },
}

None of these examples tells you can do it e.g.

    #[error("data store disconnected: {0}")]
    Disconnect(#[from] io::Error)

Would be great to have it in the doc.

Thanks!

Activity

  1. PSteinhaus commented on Jul 4, 2021

    @PSteinhaus

    Thank you, I pretty much looked at the repo just hoping to find something like this.

  2. Altair-Bueno commented on Sep 7, 2021

    @Altair-Bueno

    Took me a while to figure it out too. Should be included on README

  3. DJDuque commented on Aug 2, 2022

    @DJDuque

    Even though it works, should this be encouraged by the documentation? I don't think that this is the idiomatic way to print this error. Using #from automatically implements source; then this error should be printed like:

    println!("Error: {error}");
    println!("Caused by: {}", error.source().unwrap());

    I guess this is how most people would expect this to behave, and they would get:

    Error: data store disconnected: inner reason of failure
    Caused by: inner reason of failure
    

    Maybe an example using source is more appropriate?

  4. failable commented on Jun 15, 2024

    @failable

    Any answer from 2024?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions