2
2
#[ doc( hidden) ]
3
3
#[ macro_export]
4
4
macro_rules! impl_error_chain_processed {
5
- // Default values for `types`.
5
+ // Default values for `types` and `derive` .
6
6
(
7
+ // FIXME does not work if either types or derive isn't empty
7
8
types { }
9
+ derive { }
8
10
$( $rest: tt ) *
9
11
) => {
10
12
impl_error_chain_processed! {
11
13
types {
12
14
Error , ErrorKind , ResultExt , Result ;
13
15
}
16
+ derive {
17
+ Debug ;
18
+ }
14
19
$( $rest ) *
15
20
}
16
21
} ;
@@ -22,6 +27,7 @@ macro_rules! impl_error_chain_processed {
22
27
}
23
28
$( $rest: tt ) *
24
29
) => {
30
+ log_syntax!( rest: $( $rest) * ) ;
25
31
impl_error_chain_processed! {
26
32
types {
27
33
$error_name, $error_kind_name,
@@ -40,6 +46,10 @@ macro_rules! impl_error_chain_processed {
40
46
$result_ext_name: ident;
41
47
}
42
48
49
+ derive {
50
+ $( $trait: ident) ,* ;
51
+ }
52
+
43
53
links {
44
54
$( $link_variant: ident ( $link_error_path: path, $link_kind_path: path )
45
55
$( #[ $meta_links: meta] ) * ; ) *
@@ -350,48 +360,59 @@ macro_rules! impl_error_chain_processed {
350
360
#[ macro_export]
351
361
macro_rules! error_chain_processing {
352
362
(
353
- ( { } , $b: tt, $c: tt, $d: tt)
363
+ ( { } , $b: tt, $c: tt, $d: tt, $e : tt )
354
364
types $content: tt
355
365
$( $tail: tt ) *
356
366
) => {
357
367
error_chain_processing! {
358
- ( $content, $b, $c, $d)
368
+ ( $content, $b, $c, $d, $e)
369
+ $( $tail) *
370
+ }
371
+ } ;
372
+ (
373
+ ( $a: tt, { } , $c: tt, $d: tt, $e: tt)
374
+ derive $content: tt
375
+ $( $tail: tt ) *
376
+ ) => {
377
+ error_chain_processing! {
378
+ ( $a, $content, $c, $d, $e)
359
379
$( $tail) *
360
380
}
361
381
} ;
362
382
(
363
- ( $a: tt, { } , $c : tt, $d : tt)
383
+ ( $a: tt, $b : tt , { } , $d : tt, $e : tt)
364
384
links $content: tt
365
385
$( $tail: tt ) *
366
386
) => {
367
387
error_chain_processing! {
368
- ( $a, $content , $c , $d)
388
+ ( $a, $b , $content , $d, $e )
369
389
$( $tail) *
370
390
}
371
391
} ;
372
392
(
373
- ( $a: tt, $b: tt, { } , $d : tt)
393
+ ( $a: tt, $b: tt, $c : tt , { } , $e : tt)
374
394
foreign_links $content: tt
375
395
$( $tail: tt ) *
376
396
) => {
377
397
error_chain_processing! {
378
- ( $a, $b, $content, $d )
398
+ ( $a, $b, $c , $ content, $e )
379
399
$( $tail) *
380
400
}
381
401
} ;
382
402
(
383
- ( $a: tt, $b: tt, $c: tt, { } )
403
+ ( $a: tt, $b: tt, $c: tt, $d : tt , { } )
384
404
errors $content: tt
385
405
$( $tail: tt ) *
386
406
) => {
387
407
error_chain_processing! {
388
- ( $a, $b, $c, $content)
408
+ ( $a, $b, $c, $d , $ content)
389
409
$( $tail) *
390
410
}
391
411
} ;
392
- ( ( $a: tt, $b: tt, $c: tt, $d: tt) ) => {
412
+ ( ( $a: tt, $b: tt, $c: tt, $d: tt, $e : tt ) ) => {
393
413
impl_error_chain_processed! {
394
414
types $a
415
+ derive $e
395
416
links $b
396
417
foreign_links $c
397
418
errors $d
@@ -404,7 +425,7 @@ macro_rules! error_chain_processing {
404
425
macro_rules! error_chain {
405
426
( $( $block_name: ident { $( $block_content: tt ) * } ) * ) => {
406
427
error_chain_processing! {
407
- ( { } , { } , { } , { } )
428
+ ( { } , { } , { } , { } , { } )
408
429
$( $block_name { $( $block_content ) * } ) *
409
430
}
410
431
} ;
0 commit comments