@@ -45,7 +45,7 @@ enum ErrorKind {
45
45
ForbiddenAbi ,
46
46
ForbiddenAttr ,
47
47
ForbiddenItemKind ( ItemKind ) ,
48
- ForbiddenRepr ,
48
+ ForbiddenRepr ( Vec < Repr > ) ,
49
49
ForbiddenType ,
50
50
MalformedAttrs ,
51
51
MissingPub ,
@@ -57,25 +57,37 @@ enum ErrorKind {
57
57
58
58
impl Display for ErrorKind {
59
59
fn fmt ( & self , f : & mut Formatter < ' _ > ) -> fmt:: Result {
60
- write ! (
61
- f,
62
- "{}" ,
63
- match self {
64
- Self :: ForbiddenAbi => "forbidden ABI" ,
65
- Self :: ForbiddenAttr => "forbidden attribute" ,
66
- Self :: ForbiddenItemKind ( ItemKind :: Enum ) =>
67
- "forbidden use of enum; use the `newtype_enum!` macro instead" ,
68
- Self :: ForbiddenItemKind ( _) => "forbidden type of item" ,
69
- Self :: ForbiddenRepr => "forbidden repr" ,
70
- Self :: ForbiddenType => "forbidden type" ,
71
- Self :: MalformedAttrs => "malformed attribute contents" ,
72
- Self :: MissingPub => "missing pub" ,
73
- Self :: MissingRepr => "missing repr" ,
74
- Self :: MissingUnsafe => "missing unsafe" ,
75
- Self :: UnderscoreField => "field name starts with `_`" ,
76
- Self :: UnknownRepr => "unknown repr" ,
60
+ match self {
61
+ Self :: ForbiddenAbi => write ! ( f, "forbidden ABI" ) ,
62
+ Self :: ForbiddenAttr => write ! ( f, "forbidden attribute" ) ,
63
+ Self :: ForbiddenItemKind ( ItemKind :: Enum ) => write ! (
64
+ f,
65
+ "forbidden use of enum; use the `newtype_enum!` macro instead"
66
+ ) ,
67
+ Self :: ForbiddenItemKind ( _) => write ! ( f, "forbidden type of item" ) ,
68
+ Self :: ForbiddenRepr ( reprs) => {
69
+ assert ! ( !reprs. is_empty( ) ) ;
70
+ if reprs. len ( ) == 1 {
71
+ write ! (
72
+ f,
73
+ "the following repr attribute is forbidden: {:?}" ,
74
+ reprs[ 0 ]
75
+ )
76
+ } else {
77
+ write ! (
78
+ f,
79
+ "the following combination of repr attributes is forbidden: {reprs:?}"
80
+ )
81
+ }
77
82
}
78
- )
83
+ Self :: ForbiddenType => write ! ( f, "forbidden type" ) ,
84
+ Self :: MalformedAttrs => write ! ( f, "malformed attribute contents" ) ,
85
+ Self :: MissingPub => write ! ( f, "missing pub" ) ,
86
+ Self :: MissingRepr => write ! ( f, "missing repr" ) ,
87
+ Self :: MissingUnsafe => write ! ( f, "missing unsafe" ) ,
88
+ Self :: UnderscoreField => write ! ( f, "field name starts with `_`" ) ,
89
+ Self :: UnknownRepr => write ! ( f, "unknown repr" ) ,
90
+ }
79
91
}
80
92
}
81
93
@@ -290,7 +302,7 @@ fn check_type_attrs(attrs: &[Attribute], spanned: &dyn Spanned, src: &Path) -> R
290
302
} else if ALLOWED_REPRS . contains ( & reprs. as_slice ( ) ) {
291
303
Ok ( ( ) )
292
304
} else {
293
- Err ( Error :: new ( ErrorKind :: ForbiddenRepr , src, spanned) )
305
+ Err ( Error :: new ( ErrorKind :: ForbiddenRepr ( reprs ) , src, spanned) )
294
306
}
295
307
}
296
308
@@ -347,7 +359,7 @@ fn check_macro(item: &ItemMacro, src: &Path) -> Result<(), Error> {
347
359
let reprs = get_reprs ( & attrs) ;
348
360
let allowed_reprs: & [ & [ Repr ] ] = & [ & [ Repr :: Transparent ] ] ;
349
361
if !allowed_reprs. contains ( & reprs. as_slice ( ) ) {
350
- return Err ( Error :: new ( ErrorKind :: ForbiddenRepr , src, mac) ) ;
362
+ return Err ( Error :: new ( ErrorKind :: ForbiddenRepr ( reprs ) , src, mac) ) ;
351
363
}
352
364
}
353
365
@@ -481,7 +493,7 @@ mod tests {
481
493
}
482
494
}
483
495
} ,
484
- ErrorKind :: ForbiddenRepr ,
496
+ ErrorKind :: ForbiddenRepr ( vec ! [ Repr :: C ] ) ,
485
497
) ;
486
498
}
487
499
@@ -613,7 +625,7 @@ mod tests {
613
625
pub f: u32 ,
614
626
}
615
627
} ,
616
- ErrorKind :: ForbiddenRepr ,
628
+ ErrorKind :: ForbiddenRepr ( vec ! [ Repr :: Rust ] ) ,
617
629
) ;
618
630
619
631
// Forbidden attr.
0 commit comments