@@ -3,13 +3,21 @@ use quote::{quote, quote_spanned};
3
3
use syn:: parse_quote;
4
4
use syn:: spanned:: Spanned ;
5
5
6
+ pub fn ir_type_decodable_derive ( mut s : synstructure:: Structure < ' _ > ) -> proc_macro2:: TokenStream {
7
+ let decoder_ty = quote ! { __D } ;
8
+ s. add_impl_generic ( parse_quote ! { #decoder_ty: crate :: codec:: TyDecoder } ) ;
9
+ s. add_bounds ( synstructure:: AddBounds :: Fields ) ;
10
+
11
+ decodable_body ( s, decoder_ty)
12
+ }
13
+
6
14
pub fn type_decodable_derive ( mut s : synstructure:: Structure < ' _ > ) -> proc_macro2:: TokenStream {
7
15
let decoder_ty = quote ! { __D } ;
8
16
if !s. ast ( ) . generics . lifetimes ( ) . any ( |lt| lt. lifetime . ident == "tcx" ) {
9
17
s. add_impl_generic ( parse_quote ! { ' tcx } ) ;
10
18
}
11
19
s. add_impl_generic ( parse_quote ! { #decoder_ty: :: rustc_type_ir:: codec:: TyDecoder <I = :: rustc_middle:: ty:: TyCtxt <' tcx>>} ) ;
12
- s. add_bounds ( synstructure:: AddBounds :: Generics ) ;
20
+ s. add_bounds ( synstructure:: AddBounds :: Fields ) ;
13
21
14
22
decodable_body ( s, decoder_ty)
15
23
}
@@ -20,15 +28,15 @@ pub fn meta_decodable_derive(mut s: synstructure::Structure<'_>) -> proc_macro2:
20
28
}
21
29
s. add_impl_generic ( parse_quote ! { ' __a } ) ;
22
30
let decoder_ty = quote ! { DecodeContext <' __a, ' tcx> } ;
23
- s. add_bounds ( synstructure:: AddBounds :: Generics ) ;
31
+ s. add_bounds ( synstructure:: AddBounds :: Fields ) ;
24
32
25
33
decodable_body ( s, decoder_ty)
26
34
}
27
35
28
36
pub fn decodable_derive ( mut s : synstructure:: Structure < ' _ > ) -> proc_macro2:: TokenStream {
29
37
let decoder_ty = quote ! { __D } ;
30
38
s. add_impl_generic ( parse_quote ! { #decoder_ty: :: rustc_serialize:: Decoder } ) ;
31
- s. add_bounds ( synstructure:: AddBounds :: Generics ) ;
39
+ s. add_bounds ( synstructure:: AddBounds :: Fields ) ;
32
40
33
41
decodable_body ( s, decoder_ty)
34
42
}
@@ -90,13 +98,21 @@ fn decode_field(field: &syn::Field) -> proc_macro2::TokenStream {
90
98
quote_spanned ! { field_span=> #decode_inner_method( #__decoder) }
91
99
}
92
100
101
+ pub fn ir_type_encodable_derive ( mut s : synstructure:: Structure < ' _ > ) -> proc_macro2:: TokenStream {
102
+ let encoder_ty = quote ! { __E } ;
103
+ s. add_impl_generic ( parse_quote ! { #encoder_ty: crate :: codec:: TyEncoder } ) ;
104
+ s. add_bounds ( synstructure:: AddBounds :: Fields ) ;
105
+
106
+ encodable_body ( s, encoder_ty, false )
107
+ }
108
+
93
109
pub fn type_encodable_derive ( mut s : synstructure:: Structure < ' _ > ) -> proc_macro2:: TokenStream {
94
110
if !s. ast ( ) . generics . lifetimes ( ) . any ( |lt| lt. lifetime . ident == "tcx" ) {
95
111
s. add_impl_generic ( parse_quote ! { ' tcx} ) ;
96
112
}
97
113
let encoder_ty = quote ! { __E } ;
98
114
s. add_impl_generic ( parse_quote ! { #encoder_ty: :: rustc_type_ir:: codec:: TyEncoder <I = :: rustc_middle:: ty:: TyCtxt <' tcx>>} ) ;
99
- s. add_bounds ( synstructure:: AddBounds :: Generics ) ;
115
+ s. add_bounds ( synstructure:: AddBounds :: Fields ) ;
100
116
101
117
encodable_body ( s, encoder_ty, false )
102
118
}
@@ -107,15 +123,15 @@ pub fn meta_encodable_derive(mut s: synstructure::Structure<'_>) -> proc_macro2:
107
123
}
108
124
s. add_impl_generic ( parse_quote ! { ' __a } ) ;
109
125
let encoder_ty = quote ! { EncodeContext <' __a, ' tcx> } ;
110
- s. add_bounds ( synstructure:: AddBounds :: Generics ) ;
126
+ s. add_bounds ( synstructure:: AddBounds :: Fields ) ;
111
127
112
128
encodable_body ( s, encoder_ty, true )
113
129
}
114
130
115
131
pub fn encodable_derive ( mut s : synstructure:: Structure < ' _ > ) -> proc_macro2:: TokenStream {
116
132
let encoder_ty = quote ! { __E } ;
117
133
s. add_impl_generic ( parse_quote ! { #encoder_ty: :: rustc_serialize:: Encoder } ) ;
118
- s. add_bounds ( synstructure:: AddBounds :: Generics ) ;
134
+ s. add_bounds ( synstructure:: AddBounds :: Fields ) ;
119
135
120
136
encodable_body ( s, encoder_ty, false )
121
137
}
0 commit comments