1
1
use crate :: ast:: { Enum , Field , Input , Struct } ;
2
2
use crate :: attr:: Trait ;
3
+ use crate :: fallback;
3
4
use crate :: generics:: InferredBounds ;
4
5
use crate :: unraw:: MemberUnraw ;
5
6
use proc_macro2:: { Ident , Span , TokenStream } ;
@@ -13,7 +14,7 @@ pub fn derive(input: &DeriveInput) -> TokenStream {
13
14
// If there are invalid attributes in the input, expand to an Error impl
14
15
// anyway to minimize spurious knock-on errors in other code that uses
15
16
// this type as an Error.
16
- Err ( error) => fallback ( input, error) ,
17
+ Err ( error) => fallback:: expand ( input, error) ,
17
18
}
18
19
}
19
20
@@ -26,34 +27,6 @@ fn try_expand(input: &DeriveInput) -> Result<TokenStream> {
26
27
} )
27
28
}
28
29
29
- fn fallback ( input : & DeriveInput , error : syn:: Error ) -> TokenStream {
30
- let ty = call_site_ident ( & input. ident ) ;
31
- let ( impl_generics, ty_generics, where_clause) = input. generics . split_for_impl ( ) ;
32
-
33
- let error = error. to_compile_error ( ) ;
34
-
35
- quote ! {
36
- #error
37
-
38
- #[ allow( unused_qualifications) ]
39
- #[ automatically_derived]
40
- impl #impl_generics :: thiserror:: __private:: Error for #ty #ty_generics #where_clause
41
- where
42
- // Work around trivial bounds being unstable.
43
- // https://github.com/rust-lang/rust/issues/48214
44
- for <' workaround> #ty #ty_generics: :: core:: fmt:: Debug ,
45
- { }
46
-
47
- #[ allow( unused_qualifications) ]
48
- #[ automatically_derived]
49
- impl #impl_generics :: core:: fmt:: Display for #ty #ty_generics #where_clause {
50
- fn fmt( & self , __formatter: & mut :: core:: fmt:: Formatter ) -> :: core:: fmt:: Result {
51
- :: core:: unreachable!( )
52
- }
53
- }
54
- }
55
- }
56
-
57
30
fn impl_struct ( input : Struct ) -> TokenStream {
58
31
let ty = call_site_ident ( & input. ident ) ;
59
32
let ( impl_generics, ty_generics, where_clause) = input. generics . split_for_impl ( ) ;
@@ -494,7 +467,7 @@ fn impl_enum(input: Enum) -> TokenStream {
494
467
495
468
// Create an ident with which we can expand `impl Trait for #ident {}` on a
496
469
// deprecated type without triggering deprecation warning on the generated impl.
497
- fn call_site_ident ( ident : & Ident ) -> Ident {
470
+ pub ( crate ) fn call_site_ident ( ident : & Ident ) -> Ident {
498
471
let mut ident = ident. clone ( ) ;
499
472
ident. set_span ( ident. span ( ) . resolved_at ( Span :: call_site ( ) ) ) ;
500
473
ident
0 commit comments