thiserror icon indicating copy to clipboard operation
thiserror copied to clipboard

Improve #[from] documentation example.

Open Shaddy opened this issue 3 years ago • 4 comments

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!

Shaddy avatar May 26 '21 15:05 Shaddy

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

PSteinhaus avatar Jul 04 '21 08:07 PSteinhaus

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

Altair-Bueno avatar Sep 07 '21 09:09 Altair-Bueno

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?

DJDuque avatar Aug 02 '22 04:08 DJDuque