wherror 2.3.1

The same derive(Error) macro thiserror provides + the features you want!
Documentation
error[E0599]: the method `as_dyn_error` exists for reference `&NotError`, but its trait bounds were not satisfied
 --> tests/ui/source-enum-not-error.rs:9:14
  |
 4 | pub struct NotError;
   | ------------------- doesn't satisfy `NotError: AsDynError<'_>` or `NotError: std::error::Error`
...
 9 |     Broken { source: NotError },
   |              ^^^^^^ method cannot be called on `&NotError` due to unsatisfied trait bounds
   |
   = note: the following trait bounds were not satisfied:
           `NotError: std::error::Error`
           which is required by `NotError: AsDynError<'_>`
           `&NotError: std::error::Error`
           which is required by `&NotError: AsDynError<'_>`
note: the trait `std::error::Error` must be implemented
  --> $RUST/core/src/error.rs
   |
   | pub trait Error: Debug + Display {
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   = help: items from traits can only be used if the trait is implemented and in scope
   = note: the following trait defines an item `as_dyn_error`, perhaps you need to implement it:
           candidate #1: `AsDynError`