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] ) * ; ) *
@@ -332,48 +342,59 @@ macro_rules! error_chain_processed {
332
342
#[ macro_export]
333
343
macro_rules! error_chain_processing {
334
344
(
335
- ( { } , $b: tt, $c: tt, $d: tt)
345
+ ( { } , $b: tt, $c: tt, $d: tt, $e : tt )
336
346
types $content: tt
337
347
$( $tail: tt ) *
338
348
) => {
339
349
error_chain_processing! {
340
- ( $content, $b, $c, $d)
350
+ ( $content, $b, $c, $d, $e)
351
+ $( $tail) *
352
+ }
353
+ } ;
354
+ (
355
+ ( $a: tt, { } , $c: tt, $d: tt, $e: tt)
356
+ derive $content: tt
357
+ $( $tail: tt ) *
358
+ ) => {
359
+ error_chain_processing! {
360
+ ( $a, $content, $c, $d, $e)
341
361
$( $tail) *
342
362
}
343
363
} ;
344
364
(
345
- ( $a: tt, { } , $c : tt, $d : tt)
365
+ ( $a: tt, $b : tt , { } , $d : tt, $e : tt)
346
366
links $content: tt
347
367
$( $tail: tt ) *
348
368
) => {
349
369
error_chain_processing! {
350
- ( $a, $content , $c , $d)
370
+ ( $a, $b , $content , $d, $e )
351
371
$( $tail) *
352
372
}
353
373
} ;
354
374
(
355
- ( $a: tt, $b: tt, { } , $d : tt)
375
+ ( $a: tt, $b: tt, $c : tt , { } , $e : tt)
356
376
foreign_links $content: tt
357
377
$( $tail: tt ) *
358
378
) => {
359
379
error_chain_processing! {
360
- ( $a, $b, $content, $d )
380
+ ( $a, $b, $c , $ content, $e )
361
381
$( $tail) *
362
382
}
363
383
} ;
364
384
(
365
- ( $a: tt, $b: tt, $c: tt, { } )
385
+ ( $a: tt, $b: tt, $c: tt, $d : tt , { } )
366
386
errors $content: tt
367
387
$( $tail: tt ) *
368
388
) => {
369
389
error_chain_processing! {
370
- ( $a, $b, $c, $content)
390
+ ( $a, $b, $c, $d , $ content)
371
391
$( $tail) *
372
392
}
373
393
} ;
374
- ( ( $a: tt, $b: tt, $c: tt, $d: tt) ) => {
394
+ ( ( $a: tt, $b: tt, $c: tt, $d: tt, $e : tt ) ) => {
375
395
error_chain_processed! {
376
396
types $a
397
+ derive $e
377
398
links $b
378
399
foreign_links $c
379
400
errors $d
@@ -387,7 +408,7 @@ macro_rules! error_chain_processing {
387
408
macro_rules! error_chain {
388
409
( $( $block_name: ident { $( $block_content: tt ) * } ) * ) => {
389
410
error_chain_processing! {
390
- ( { } , { } , { } , { } )
411
+ ( { } , { } , { } , { } , { } )
391
412
$( $block_name { $( $block_content ) * } ) *
392
413
}
393
414
} ;
0 commit comments