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 struct `NotError`, but its trait bounds were not satisfied
 --> tests/ui/source-struct-not-error.rs:9:5
  |
 4 | struct NotError;
   | --------------- method `as_dyn_error` not found for this struct because it doesn't satisfy `NotError: AsDynError<'_>` or `NotError: std::error::Error`
...
 9 |     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<'_>`
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`