@@ -30,7 +30,7 @@ enum ProcessReceiptError {
3030/// Indicates which versions of Receipts where processed
3131/// It's intended to be used for migration tests
3232#[ derive( Debug , PartialEq , Eq ) ]
33- pub enum Processed {
33+ pub enum ProcessedReceipt {
3434 V1 ,
3535 V2 ,
3636 Both ,
@@ -41,40 +41,35 @@ impl InnerContext {
4141 async fn process_db_receipts (
4242 & self ,
4343 buffer : Vec < DatabaseReceipt > ,
44- ) -> Result < Processed , ProcessReceiptError > {
44+ ) -> Result < ProcessedReceipt , ProcessReceiptError > {
4545 let ( v1_receipts, v2_receipts) : ( Vec < _ > , Vec < _ > ) =
4646 buffer. into_iter ( ) . partition_map ( |r| match r {
4747 DatabaseReceipt :: V1 ( db_receipt_v1) => Either :: Left ( db_receipt_v1) ,
4848 DatabaseReceipt :: V2 ( db_receipt_v2) => Either :: Right ( db_receipt_v2) ,
4949 } ) ;
5050
51- let ( insert_v1, insert_v2) = match ( v1_receipts. is_empty ( ) , v2_receipts. is_empty ( ) ) {
52- ( true , true ) => ( None , None ) ,
53- ( false , true ) => ( Some ( self . store_receipts_v1 ( v1_receipts) . await ) , None ) ,
54- ( true , false ) => ( None , Some ( self . store_receipts_v2 ( v2_receipts) . await ) ) ,
55- ( false , false ) => {
56- let ( v1, v2) = tokio:: join!(
57- self . store_receipts_v1( v1_receipts) ,
58- self . store_receipts_v2( v2_receipts) ,
59- ) ;
60- ( Some ( v1) , Some ( v2) )
61- }
62- } ;
51+ let ( insert_v1, insert_v2) = tokio:: join!(
52+ self . store_receipts_v1( v1_receipts) ,
53+ self . store_receipts_v2( v2_receipts) ,
54+ ) ;
6355
6456 match ( insert_v1, insert_v2) {
65- ( Some ( Err ( e1) ) , Some ( Err ( e2) ) ) => Err ( ProcessReceiptError :: Both ( e1. into ( ) , e2. into ( ) ) ) ,
66- ( Some ( Err ( e1 ) ) , _ ) => Err ( ProcessReceiptError :: V1 ( e1 . into ( ) ) ) ,
67- ( _ , Some ( Err ( e2 ) ) ) => Err ( ProcessReceiptError :: V2 ( e2 . into ( ) ) ) ,
68-
69- // only useful for testing
70- ( Some ( Ok ( _ ) ) , None ) => Ok ( Processed :: V1 ) ,
71- ( None , Some ( Ok ( _ ) ) ) => Ok ( Processed :: V2 ) ,
72- ( Some ( Ok ( _ ) ) , Some ( Ok ( _) ) ) => Ok ( Processed :: Both ) ,
73- ( None , None ) => Ok ( Processed :: None ) ,
57+ ( Err ( e1) , Err ( e2) ) => Err ( ProcessReceiptError :: Both ( e1. into ( ) , e2. into ( ) ) ) ,
58+
59+ ( Err ( e1 ) , Ok ( _ ) ) => Err ( ProcessReceiptError :: V1 ( e1 . into ( ) ) ) ,
60+ ( Ok ( _ ) , Err ( e2 ) ) => Err ( ProcessReceiptError :: V2 ( e2 . into ( ) ) ) ,
61+
62+ ( Ok ( 0 ) , Ok ( 0 ) ) => Ok ( ProcessedReceipt :: None ) ,
63+ ( Ok ( _ ) , Ok ( 0 ) ) => Ok ( ProcessedReceipt :: V1 ) ,
64+ ( Ok ( 0 ) , Ok ( _) ) => Ok ( ProcessedReceipt :: V2 ) ,
65+ ( Ok ( _ ) , Ok ( _ ) ) => Ok ( ProcessedReceipt :: Both ) ,
7466 }
7567 }
7668
77- async fn store_receipts_v1 ( & self , receipts : Vec < DbReceiptV1 > ) -> Result < ( ) , AdapterError > {
69+ async fn store_receipts_v1 ( & self , receipts : Vec < DbReceiptV1 > ) -> Result < u64 , AdapterError > {
70+ if receipts. is_empty ( ) {
71+ return Ok ( 0 ) ;
72+ }
7873 let receipts_len = receipts. len ( ) ;
7974 let mut signers = Vec :: with_capacity ( receipts_len) ;
8075 let mut signatures = Vec :: with_capacity ( receipts_len) ;
@@ -91,7 +86,7 @@ impl InnerContext {
9186 nonces. push ( receipt. nonce ) ;
9287 values. push ( receipt. value ) ;
9388 }
94- sqlx:: query!(
89+ let query_res = sqlx:: query!(
9590 r#"INSERT INTO scalar_tap_receipts (
9691 signer_address,
9792 signature,
@@ -121,10 +116,13 @@ impl InnerContext {
121116 anyhow ! ( e)
122117 } ) ?;
123118
124- Ok ( ( ) )
119+ Ok ( query_res . rows_affected ( ) )
125120 }
126121
127- async fn store_receipts_v2 ( & self , receipts : Vec < DbReceiptV2 > ) -> Result < ( ) , AdapterError > {
122+ async fn store_receipts_v2 ( & self , receipts : Vec < DbReceiptV2 > ) -> Result < u64 , AdapterError > {
123+ if receipts. is_empty ( ) {
124+ return Ok ( 0 ) ;
125+ }
128126 let receipts_len = receipts. len ( ) ;
129127 let mut signers = Vec :: with_capacity ( receipts_len) ;
130128 let mut signatures = Vec :: with_capacity ( receipts_len) ;
@@ -147,7 +145,7 @@ impl InnerContext {
147145 nonces. push ( receipt. nonce ) ;
148146 values. push ( receipt. value ) ;
149147 }
150- sqlx:: query!(
148+ let query_res = sqlx:: query!(
151149 r#"INSERT INTO tap_horizon_receipts (
152150 signer_address,
153151 signature,
@@ -186,7 +184,7 @@ impl InnerContext {
186184 anyhow ! ( e)
187185 } ) ?;
188186
189- Ok ( ( ) )
187+ Ok ( query_res . rows_affected ( ) )
190188 }
191189}
192190
@@ -347,7 +345,8 @@ mod tests {
347345
348346 use crate :: tap:: {
349347 receipt_store:: {
350- DatabaseReceipt , DbReceiptV1 , DbReceiptV2 , InnerContext , ProcessReceiptError , Processed ,
348+ DatabaseReceipt , DbReceiptV1 , DbReceiptV2 , InnerContext , ProcessReceiptError ,
349+ ProcessedReceipt ,
351350 } ,
352351 AdapterError ,
353352 } ;
@@ -373,14 +372,14 @@ mod tests {
373372 use super :: * ;
374373
375374 #[ rstest:: rstest]
376- #[ case( Processed :: None , async { vec![ ] } ) ]
377- #[ case( Processed :: V1 , async { vec![ create_v1( ) . await ] } ) ]
378- #[ case( Processed :: V2 , async { vec![ create_v2( ) . await ] } ) ]
379- #[ case( Processed :: Both , async { vec![ create_v2( ) . await , create_v1( ) . await ] } ) ]
375+ #[ case( ProcessedReceipt :: None , async { vec![ ] } ) ]
376+ #[ case( ProcessedReceipt :: V1 , async { vec![ create_v1( ) . await ] } ) ]
377+ #[ case( ProcessedReceipt :: V2 , async { vec![ create_v2( ) . await ] } ) ]
378+ #[ case( ProcessedReceipt :: Both , async { vec![ create_v2( ) . await , create_v1( ) . await ] } ) ]
380379 #[ sqlx:: test( migrations = "../../migrations" ) ]
381380 async fn v1_and_v2_are_processed_successfully (
382381 #[ ignore] pgpool : PgPool ,
383- #[ case] expected : Processed ,
382+ #[ case] expected : ProcessedReceipt ,
384383 #[ future( awt) ]
385384 #[ case]
386385 receipts : Vec < DatabaseReceipt > ,
@@ -402,7 +401,7 @@ mod tests {
402401
403402 let res = context. process_db_receipts ( vec ! [ ] ) . await . unwrap ( ) ;
404403
405- assert_eq ! ( res, Processed :: None ) ;
404+ assert_eq ! ( res, ProcessedReceipt :: None ) ;
406405 }
407406
408407 #[ sqlx:: test( migrator = "WITHOUT_HORIZON_MIGRATIONS" ) ]
@@ -414,7 +413,7 @@ mod tests {
414413
415414 let res = context. process_db_receipts ( receipts) . await . unwrap ( ) ;
416415
417- assert_eq ! ( res, Processed :: V1 ) ;
416+ assert_eq ! ( res, ProcessedReceipt :: V1 ) ;
418417 }
419418
420419 #[ rstest:: rstest]
0 commit comments