@@ -2,34 +2,22 @@ use darling::{ast::Data, Error, FromDeriveInput, FromField, ToTokens};
2
2
use proc_macro:: TokenStream ;
3
3
use proc_macro2:: TokenStream as TokenStream2 ;
4
4
use quote:: quote;
5
- use syn:: { parse_macro_input, DeriveInput , Ident , Result } ;
6
-
7
- #[ proc_macro_derive( FromRowTokioPostgres , attributes( from_row) ) ]
8
- pub fn derive_from_row_tokio_postgres ( input : TokenStream ) -> TokenStream {
9
- derive_from_row ( input, quote:: format_ident!( "tokio_postgres" ) )
10
- }
11
-
12
- #[ proc_macro_derive( FromRowPostgres , attributes( from_row) ) ]
13
- pub fn derive_from_row_postgres ( input : TokenStream ) -> TokenStream {
14
- derive_from_row ( input, quote:: format_ident!( "postgres" ) )
15
- }
5
+ use syn:: { parse_macro_input, DeriveInput , Result } ;
16
6
17
7
/// Calls the fallible entry point and writes any errors to the tokenstream.
18
- fn derive_from_row ( input : TokenStream , module : Ident ) -> TokenStream {
8
+ #[ proc_macro_derive( FromRow , attributes( from_row) ) ]
9
+ pub fn derive_from_row ( input : TokenStream ) -> TokenStream {
19
10
let derive_input = parse_macro_input ! ( input as DeriveInput ) ;
20
- match try_derive_from_row ( & derive_input, module ) {
11
+ match try_derive_from_row ( & derive_input) {
21
12
Ok ( result) => result,
22
13
Err ( err) => err. write_errors ( ) . into ( ) ,
23
14
}
24
15
}
25
16
26
17
/// Fallible entry point for generating a `FromRow` implementation
27
- fn try_derive_from_row (
28
- input : & DeriveInput ,
29
- module : Ident ,
30
- ) -> std:: result:: Result < TokenStream , Error > {
18
+ fn try_derive_from_row ( input : & DeriveInput ) -> std:: result:: Result < TokenStream , Error > {
31
19
let from_row_derive = DeriveFromRow :: from_derive_input ( input) ?;
32
- Ok ( from_row_derive. generate ( module ) ?)
20
+ Ok ( from_row_derive. generate ( ) ?)
33
21
}
34
22
35
23
/// Main struct for deriving `FromRow` for a struct.
@@ -56,11 +44,11 @@ impl DeriveFromRow {
56
44
}
57
45
58
46
/// Generates any additional where clause predicates needed for the fields in this struct.
59
- fn predicates ( & self , module : & Ident ) -> Result < Vec < TokenStream2 > > {
47
+ fn predicates ( & self ) -> Result < Vec < TokenStream2 > > {
60
48
let mut predicates = Vec :: new ( ) ;
61
49
62
50
for field in self . fields ( ) {
63
- field. add_predicates ( & module , & mut predicates) ?;
51
+ field. add_predicates ( & mut predicates) ?;
64
52
}
65
53
66
54
Ok ( predicates)
@@ -75,37 +63,37 @@ impl DeriveFromRow {
75
63
}
76
64
77
65
/// Generate the `FromRow` implementation.
78
- fn generate ( self , module : Ident ) -> Result < TokenStream > {
66
+ fn generate ( self ) -> Result < TokenStream > {
79
67
self . validate ( ) ?;
80
68
81
69
let ident = & self . ident ;
82
70
83
71
let ( impl_generics, ty_generics, where_clause) = self . generics . split_for_impl ( ) ;
84
72
let original_predicates = where_clause. clone ( ) . map ( |w| & w. predicates ) . into_iter ( ) ;
85
- let predicates = self . predicates ( & module ) ?;
73
+ let predicates = self . predicates ( ) ?;
86
74
87
75
let from_row_fields = self
88
76
. fields ( )
89
77
. iter ( )
90
- . map ( |f| f. generate_from_row ( & module ) )
78
+ . map ( |f| f. generate_from_row ( ) )
91
79
. collect :: < syn:: Result < Vec < _ > > > ( ) ?;
92
80
93
81
let try_from_row_fields = self
94
82
. fields ( )
95
83
. iter ( )
96
- . map ( |f| f. generate_try_from_row ( & module ) )
84
+ . map ( |f| f. generate_try_from_row ( ) )
97
85
. collect :: < syn:: Result < Vec < _ > > > ( ) ?;
98
86
99
87
Ok ( quote ! {
100
88
impl #impl_generics postgres_from_row:: FromRow for #ident #ty_generics where #( #original_predicates) , * #( #predicates) , * {
101
89
102
- fn from_row( row: & #module :: Row ) -> Self {
90
+ fn from_row( row: & postgres_from_row :: tokio_postgres :: Row ) -> Self {
103
91
Self {
104
92
#( #from_row_fields) , *
105
93
}
106
94
}
107
95
108
- fn try_from_row( row: & #module :: Row ) -> std:: result:: Result <Self , #module :: Error > {
96
+ fn try_from_row( row: & postgres_from_row :: tokio_postgres :: Row ) -> std:: result:: Result <Self , postgres_from_row :: tokio_postgres :: Error > {
109
97
Ok ( Self {
110
98
#( #try_from_row_fields) , *
111
99
} )
@@ -187,14 +175,14 @@ impl FromRowField {
187
175
/// and when using either `from` or `try_from` attributes it additionally pushes this bound:
188
176
/// `T: std::convert::From<R>`, where `T` is the type specified in the struct and `R` is the
189
177
/// type specified in the `[try]_from` attribute.
190
- fn add_predicates ( & self , module : & Ident , predicates : & mut Vec < TokenStream2 > ) -> Result < ( ) > {
178
+ fn add_predicates ( & self , predicates : & mut Vec < TokenStream2 > ) -> Result < ( ) > {
191
179
let target_ty = & self . target_ty ( ) ?;
192
180
let ty = & self . ty ;
193
181
194
182
predicates. push ( if self . flatten {
195
183
quote ! ( #target_ty: postgres_from_row:: FromRow )
196
184
} else {
197
- quote ! ( #target_ty: for <' a> #module :: types:: FromSql <' a>)
185
+ quote ! ( #target_ty: for <' a> postgres_from_row :: tokio_postgres :: types:: FromSql <' a>)
198
186
} ) ;
199
187
200
188
if self . from . is_some ( ) {
@@ -203,15 +191,15 @@ impl FromRowField {
203
191
let try_from = quote ! ( std:: convert:: TryFrom <#target_ty>) ;
204
192
205
193
predicates. push ( quote ! ( #ty: #try_from) ) ;
206
- predicates. push ( quote ! ( #module :: Error : std:: convert:: From <<#ty as #try_from>:: Error >) ) ;
194
+ predicates. push ( quote ! ( postgres_from_row :: tokio_postgres :: Error : std:: convert:: From <<#ty as #try_from>:: Error >) ) ;
207
195
predicates. push ( quote ! ( <#ty as #try_from>:: Error : std:: fmt:: Debug ) ) ;
208
196
}
209
197
210
198
Ok ( ( ) )
211
199
}
212
200
213
201
/// Generate the line needed to retrievee this field from a row when calling `from_row`.
214
- fn generate_from_row ( & self , module : & Ident ) -> Result < TokenStream2 > {
202
+ fn generate_from_row ( & self ) -> Result < TokenStream2 > {
215
203
let ident = self . ident . as_ref ( ) . unwrap ( ) ;
216
204
let column_name = self . column_name ( ) ;
217
205
let field_ty = & self . ty ;
@@ -220,7 +208,7 @@ impl FromRowField {
220
208
let mut base = if self . flatten {
221
209
quote ! ( <#target_ty as postgres_from_row:: FromRow >:: from_row( row) )
222
210
} else {
223
- quote ! ( #module :: Row :: get:: <& str , #target_ty>( row, #column_name) )
211
+ quote ! ( postgres_from_row :: tokio_postgres :: Row :: get:: <& str , #target_ty>( row, #column_name) )
224
212
} ;
225
213
226
214
if self . from . is_some ( ) {
@@ -233,7 +221,7 @@ impl FromRowField {
233
221
}
234
222
235
223
/// Generate the line needed to retrieve this field from a row when calling `try_from_row`.
236
- fn generate_try_from_row ( & self , module : & Ident ) -> Result < TokenStream2 > {
224
+ fn generate_try_from_row ( & self ) -> Result < TokenStream2 > {
237
225
let ident = self . ident . as_ref ( ) . unwrap ( ) ;
238
226
let column_name = self . column_name ( ) ;
239
227
let field_ty = & self . ty ;
@@ -242,7 +230,7 @@ impl FromRowField {
242
230
let mut base = if self . flatten {
243
231
quote ! ( <#target_ty as postgres_from_row:: FromRow >:: try_from_row( row) ?)
244
232
} else {
245
- quote ! ( #module :: Row :: try_get:: <& str , #target_ty>( row, #column_name) ?)
233
+ quote ! ( postgres_from_row :: tokio_postgres :: Row :: try_get:: <& str , #target_ty>( row, #column_name) ?)
246
234
} ;
247
235
248
236
if self . from . is_some ( ) {
0 commit comments