@@ -42,7 +42,7 @@ macro_rules! impl_error_chain_processed {
42
42
}
43
43
44
44
derive {
45
- $( $trait : ident) ,*
45
+ $( $bound : ident) ,*
46
46
}
47
47
48
48
links {
@@ -60,6 +60,10 @@ macro_rules! impl_error_chain_processed {
60
60
}
61
61
62
62
) => {
63
+ use :: std:: fmt:: Debug ;
64
+ use :: std:: error:: Error as StdError ;
65
+ create_super_trait!( Trait : Debug , StdError , Send $( , $bound) * ) ;
66
+
63
67
/// The Error type.
64
68
///
65
69
/// This tuple struct is made of two elements:
@@ -69,7 +73,7 @@ macro_rules! impl_error_chain_processed {
69
73
/// internals, containing:
70
74
/// - a backtrace, generated when the error is created.
71
75
/// - an error chain, used for the implementation of `Error::cause()`.
72
- #[ derive( Debug ) ]
76
+ #[ derive( Debug , $ ( $bound ) , * ) ]
73
77
pub struct $error_name(
74
78
// The members must be `pub` for `links`.
75
79
/// The kind of the error.
@@ -256,7 +260,7 @@ macro_rules! impl_error_chain_processed {
256
260
257
261
impl_error_chain_kind! {
258
262
/// The kind of an error.
259
- #[ derive( Debug ) ]
263
+ #[ derive( Debug , $ ( $bound ) , * ) ]
260
264
pub enum $error_kind_name {
261
265
262
266
/// A convenient variant for String.
@@ -426,6 +430,19 @@ macro_rules! error_chain {
426
430
} ;
427
431
}
428
432
433
+ /// Macro used to generate traits with `Self` bounds
434
+ #[ macro_export]
435
+ #[ doc( hidden) ]
436
+ macro_rules! create_super_trait {
437
+ ( $name: ident: $( $bound: ident) ,* ) => {
438
+ create_super_trait!( $name: $( $bound +) * ) ;
439
+ } ;
440
+ ( $name: ident: $bound_1: ident + $( $bound_2: tt +) * ) => {
441
+ trait $name: $bound_1 $( + $bound_2) * { }
442
+ impl <T : $bound_1 $( + $bound_2) * > $name for T { }
443
+ } ;
444
+ }
445
+
429
446
/// Macro used to manage the `backtrace` feature.
430
447
///
431
448
/// See
0 commit comments