@@ -9,7 +9,7 @@ use syn::punctuated::Punctuated;
9
9
use syn:: token:: Comma ;
10
10
use syn:: {
11
11
parse_quote, Data , DataEnum , DataStruct , DeriveInput , Expr , Field , Fields , FieldsNamed ,
12
- FieldsUnnamed , Lifetime , LifetimeParam , Stmt , Variant ,
12
+ FieldsUnnamed , Lifetime , LifetimeParam , Stmt , TypeParamBound , Variant ,
13
13
} ;
14
14
15
15
pub fn expand_derive_encode ( input : & DeriveInput ) -> syn:: Result < TokenStream > {
@@ -205,24 +205,21 @@ fn expand_derive_encode_struct(
205
205
let ident = & input. ident ;
206
206
let column_count = fields. len ( ) ;
207
207
208
- // extract type generics
209
- let generics = & input. generics ;
210
- let ( _, ty_generics, _) = generics. split_for_impl ( ) ;
208
+ let ( _, ty_generics, where_clause) = input. generics . split_for_impl ( ) ;
211
209
212
- // add db type for impl generics & where clause
213
- let mut generics = generics. clone ( ) ;
214
-
215
- let predicates = & mut generics. make_where_clause ( ) . predicates ;
216
-
217
- for field in fields {
218
- let ty = & field. ty ;
210
+ let mut generics = input. generics . clone ( ) ;
219
211
220
- predicates
221
- . push ( parse_quote ! ( #ty: for <' q> :: sqlx:: encode:: Encode <' q, :: sqlx:: Postgres >) ) ;
222
- predicates. push ( parse_quote ! ( #ty: :: sqlx:: types:: Type <:: sqlx:: Postgres >) ) ;
212
+ // add db type for impl generics & where clause
213
+ for type_param in & mut generics. type_params_mut ( ) {
214
+ type_param. bounds . extend :: < [ TypeParamBound ; 2 ] > ( [
215
+ parse_quote ! ( for <' encode> :: sqlx:: encode:: Encode <' encode, :: sqlx:: Postgres >) ,
216
+ parse_quote ! ( :: sqlx:: types:: Type <:: sqlx:: Postgres >) ,
217
+ ] ) ;
223
218
}
224
219
225
- let ( impl_generics, _, where_clause) = generics. split_for_impl ( ) ;
220
+ generics. params . push ( parse_quote ! ( ' q) ) ;
221
+
222
+ let ( impl_generics, _, _) = generics. split_for_impl ( ) ;
226
223
227
224
let writes = fields. iter ( ) . map ( |field| -> Stmt {
228
225
let id = & field. ident ;
0 commit comments