@@ -117,7 +117,7 @@ pub struct AttributeRowQuery<'c, 'a, 's, C: GenericClient, T, const N: usize> {
117117 client : & ' c C ,
118118 params : [ & ' a ( dyn postgres_types:: ToSql + Sync ) ; N ] ,
119119 stmt : & ' s mut crate :: client:: async_:: Stmt ,
120- extractor : fn ( & tokio_postgres:: Row ) -> AttributeRowBorrowed ,
120+ extractor : fn ( & tokio_postgres:: Row ) -> Result < AttributeRowBorrowed , tokio_postgres :: Error > ,
121121 mapper : fn ( AttributeRowBorrowed ) -> T ,
122122}
123123impl < ' c , ' a , ' s , C , T : ' c , const N : usize > AttributeRowQuery < ' c , ' a , ' s , C , T , N >
@@ -139,7 +139,7 @@ where
139139 pub async fn one ( self ) -> Result < T , tokio_postgres:: Error > {
140140 let stmt = self . stmt . prepare ( self . client ) . await ?;
141141 let row = self . client . query_one ( stmt, & self . params ) . await ?;
142- Ok ( ( self . mapper ) ( ( self . extractor ) ( & row) ) )
142+ Ok ( ( self . mapper ) ( ( self . extractor ) ( & row) ? ) )
143143 }
144144 pub async fn all ( self ) -> Result < Vec < T > , tokio_postgres:: Error > {
145145 self . iter ( ) . await ?. try_collect ( ) . await
@@ -150,7 +150,11 @@ where
150150 . client
151151 . query_opt ( stmt, & self . params )
152152 . await ?
153- . map ( |row| ( self . mapper ) ( ( self . extractor ) ( & row) ) ) )
153+ . map ( |row| {
154+ let extracted = ( self . extractor ) ( & row) ?;
155+ Ok ( ( self . mapper ) ( extracted) )
156+ } )
157+ . transpose ( ) ?)
154158 }
155159 pub async fn iter (
156160 self ,
@@ -163,7 +167,12 @@ where
163167 . client
164168 . query_raw ( stmt, crate :: slice_iter ( & self . params ) )
165169 . await ?
166- . map ( move |res| res. map ( |row| ( self . mapper ) ( ( self . extractor ) ( & row) ) ) )
170+ . map ( move |res| {
171+ res. and_then ( |row| {
172+ let extracted = ( self . extractor ) ( & row) ?;
173+ Ok ( ( self . mapper ) ( extracted) )
174+ } )
175+ } )
167176 . into_stream ( ) ;
168177 Ok ( it)
169178 }
@@ -172,7 +181,7 @@ pub struct I32Query<'c, 'a, 's, C: GenericClient, T, const N: usize> {
172181 client : & ' c C ,
173182 params : [ & ' a ( dyn postgres_types:: ToSql + Sync ) ; N ] ,
174183 stmt : & ' s mut crate :: client:: async_:: Stmt ,
175- extractor : fn ( & tokio_postgres:: Row ) -> i32 ,
184+ extractor : fn ( & tokio_postgres:: Row ) -> Result < i32 , tokio_postgres :: Error > ,
176185 mapper : fn ( i32 ) -> T ,
177186}
178187impl < ' c , ' a , ' s , C , T : ' c , const N : usize > I32Query < ' c , ' a , ' s , C , T , N >
@@ -191,7 +200,7 @@ where
191200 pub async fn one ( self ) -> Result < T , tokio_postgres:: Error > {
192201 let stmt = self . stmt . prepare ( self . client ) . await ?;
193202 let row = self . client . query_one ( stmt, & self . params ) . await ?;
194- Ok ( ( self . mapper ) ( ( self . extractor ) ( & row) ) )
203+ Ok ( ( self . mapper ) ( ( self . extractor ) ( & row) ? ) )
195204 }
196205 pub async fn all ( self ) -> Result < Vec < T > , tokio_postgres:: Error > {
197206 self . iter ( ) . await ?. try_collect ( ) . await
@@ -202,7 +211,11 @@ where
202211 . client
203212 . query_opt ( stmt, & self . params )
204213 . await ?
205- . map ( |row| ( self . mapper ) ( ( self . extractor ) ( & row) ) ) )
214+ . map ( |row| {
215+ let extracted = ( self . extractor ) ( & row) ?;
216+ Ok ( ( self . mapper ) ( extracted) )
217+ } )
218+ . transpose ( ) ?)
206219 }
207220 pub async fn iter (
208221 self ,
@@ -215,7 +228,12 @@ where
215228 . client
216229 . query_raw ( stmt, crate :: slice_iter ( & self . params ) )
217230 . await ?
218- . map ( move |res| res. map ( |row| ( self . mapper ) ( ( self . extractor ) ( & row) ) ) )
231+ . map ( move |res| {
232+ res. and_then ( |row| {
233+ let extracted = ( self . extractor ) ( & row) ?;
234+ Ok ( ( self . mapper ) ( extracted) )
235+ } )
236+ } )
219237 . into_stream ( ) ;
220238 Ok ( it)
221239 }
@@ -236,19 +254,22 @@ impl ListAttributesStmt {
236254 client,
237255 params : [ organization_id] ,
238256 stmt : & mut self . 0 ,
239- extractor : |row| AttributeRowBorrowed {
240- id : row. get ( 0 ) ,
241- organization_id : row. get ( 1 ) ,
242- type_id : row. get ( 2 ) ,
243- title : row. get ( 3 ) ,
244- description : row. get ( 4 ) ,
245- slug : row. get ( 5 ) ,
246- external_id : row. get ( 6 ) ,
247- created_by : row. get ( 7 ) ,
248- created_at : row. get ( 8 ) ,
249- updated_at : row. get ( 9 ) ,
250- r#type : row. get ( 10 ) ,
251- } ,
257+ extractor :
258+ |row : & tokio_postgres:: Row | -> Result < AttributeRowBorrowed , tokio_postgres:: Error > {
259+ Ok ( AttributeRowBorrowed {
260+ id : row. try_get ( 0 ) ?,
261+ organization_id : row. try_get ( 1 ) ?,
262+ type_id : row. try_get ( 2 ) ?,
263+ title : row. try_get ( 3 ) ?,
264+ description : row. try_get ( 4 ) ?,
265+ slug : row. try_get ( 5 ) ?,
266+ external_id : row. try_get ( 6 ) ?,
267+ created_by : row. try_get ( 7 ) ?,
268+ created_at : row. try_get ( 8 ) ?,
269+ updated_at : row. try_get ( 9 ) ?,
270+ r#type : row. try_get ( 10 ) ?,
271+ } )
272+ } ,
252273 mapper : |it| AttributeRow :: from ( it) ,
253274 }
254275 }
@@ -272,19 +293,22 @@ impl GetAttributeStmt {
272293 client,
273294 params : [ organization_id, id, external_id, slug] ,
274295 stmt : & mut self . 0 ,
275- extractor : |row| AttributeRowBorrowed {
276- id : row. get ( 0 ) ,
277- organization_id : row. get ( 1 ) ,
278- type_id : row. get ( 2 ) ,
279- title : row. get ( 3 ) ,
280- description : row. get ( 4 ) ,
281- slug : row. get ( 5 ) ,
282- external_id : row. get ( 6 ) ,
283- created_by : row. get ( 7 ) ,
284- created_at : row. get ( 8 ) ,
285- updated_at : row. get ( 9 ) ,
286- r#type : row. get ( 10 ) ,
287- } ,
296+ extractor :
297+ |row : & tokio_postgres:: Row | -> Result < AttributeRowBorrowed , tokio_postgres:: Error > {
298+ Ok ( AttributeRowBorrowed {
299+ id : row. try_get ( 0 ) ?,
300+ organization_id : row. try_get ( 1 ) ?,
301+ type_id : row. try_get ( 2 ) ?,
302+ title : row. try_get ( 3 ) ?,
303+ description : row. try_get ( 4 ) ?,
304+ slug : row. try_get ( 5 ) ?,
305+ external_id : row. try_get ( 6 ) ?,
306+ created_by : row. try_get ( 7 ) ?,
307+ created_at : row. try_get ( 8 ) ?,
308+ updated_at : row. try_get ( 9 ) ?,
309+ r#type : row. try_get ( 10 ) ?,
310+ } )
311+ } ,
288312 mapper : |it| AttributeRow :: from ( it) ,
289313 }
290314 }
@@ -332,7 +356,7 @@ impl GetAttributeIdStmt {
332356 client,
333357 params : [ organization_id, id, external_id, slug] ,
334358 stmt : & mut self . 0 ,
335- extractor : |row| row. get ( 0 ) ,
359+ extractor : |row| Ok ( row. try_get ( 0 ) ? ) ,
336360 mapper : |it| it,
337361 }
338362 }
@@ -400,7 +424,7 @@ impl InsertAttributeStmt {
400424 created_by,
401425 ] ,
402426 stmt : & mut self . 0 ,
403- extractor : |row| row. get ( 0 ) ,
427+ extractor : |row| Ok ( row. try_get ( 0 ) ? ) ,
404428 mapper : |it| it,
405429 }
406430 }
@@ -566,7 +590,7 @@ impl AssociateStyleAttributesStmt {
566590 client,
567591 params : [ style_id, attribute_ids] ,
568592 stmt : & mut self . 0 ,
569- extractor : |row| row. get ( 0 ) ,
593+ extractor : |row| Ok ( row. try_get ( 0 ) ? ) ,
570594 mapper : |it| it,
571595 }
572596 }
0 commit comments