this post was submitted on 11 Jun 2026
33 points (97.1% liked)
Rust
8060 readers
16 users here now
Welcome to the Rust community! This is a place to discuss about the Rust programming language.
Wormhole
Credits
- The icon is a modified version of the official rust logo (changing the colors to a gradient and black background)
founded 3 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
Check out https://docs.rs/thiserror/latest/thiserror/. You can do this:
And then you can just do
foo(a, b)?because there's now aFromimpl forMyErrorfromLibraryError.You now get a proper error chain via
source(). You can use this to have a nice report at the top level using https://docs.rs/thiserror-ext/0.3.0/thiserror_ext/struct.Report.html that looks like this:I'm playing with this pattern, but it seems like it forces you to have a variant for every upstream error. For instance, I have this
DatabaseError:But I might have 2 or 3 error types that turn into
DatabaseError::Serialize. Then I end up doing customFromimpls. Then I realize serde might beSerializeorDeserialize, so I'm back where I started.Though I would like to have that chain of errors, but I haven't figured out how to do the custom
impl Fromyet (or if it ends up being useful in my case, even).Thanks for the ideas.
For multiple types turning into one variant: you can either impl From for the others yourself, or you can have another enum with variants for them and have thiserror generate the From impl. I usually have lots of enums, at least one per module, sometimes even one per function, that form a tree. The errors you design should relate to the action that was being tried, and only encapsulate the lower error as context information.
I see you're using strings. You can do that, but then you'll lose control over formatting, and additional context info that might be contained in them.
Designing errors isn't trivial and requires some experience. Try some things and over time you'll see what works best.
You can also check out https://docs.rs/snafu/latest/snafu/guide/index.html, another great library - their docs contain excellent guidance on designing error types.