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