@@ -10,20 +10,19 @@ use supabase_wrappers::prelude::*;
10
10
11
11
use super :: { StripeFdwError , StripeFdwResult } ;
12
12
13
- fn create_client ( api_key : & str ) -> ClientWithMiddleware {
13
+ fn create_client ( api_key : & str ) -> StripeFdwResult < ClientWithMiddleware > {
14
14
let mut headers = header:: HeaderMap :: new ( ) ;
15
15
let value = format ! ( "Bearer {}" , api_key) ;
16
- let mut auth_value = header:: HeaderValue :: from_str ( & value) . unwrap ( ) ;
16
+ let mut auth_value = header:: HeaderValue :: from_str ( & value) ? ;
17
17
auth_value. set_sensitive ( true ) ;
18
18
headers. insert ( header:: AUTHORIZATION , auth_value) ;
19
19
let client = reqwest:: Client :: builder ( )
20
20
. default_headers ( headers)
21
- . build ( )
22
- . unwrap ( ) ;
21
+ . build ( ) ?;
23
22
let retry_policy = ExponentialBackoff :: builder ( ) . build_with_max_retries ( 3 ) ;
24
- ClientBuilder :: new ( client)
23
+ Ok ( ClientBuilder :: new ( client)
25
24
. with ( RetryTransientMiddleware :: new_with_policy ( retry_policy) )
26
- . build ( )
25
+ . build ( ) )
27
26
}
28
27
29
28
fn body_to_rows (
@@ -57,8 +56,10 @@ fn body_to_rows(
57
56
. as_object ( )
58
57
. and_then ( |v| v. get ( * bal_type) )
59
58
. and_then ( |v| v. as_array ( ) )
60
- . map ( |v| v[ 0 ] . as_object ( ) . unwrap ( ) . clone ( ) )
61
- . unwrap ( ) ;
59
+ . map ( |v| v[ 0 ] . as_object ( ) . ok_or ( StripeFdwError :: InvalidResponse ) )
60
+ . transpose ( ) ?
61
+ . ok_or ( StripeFdwError :: InvalidResponse ) ?
62
+ . clone ( ) ;
62
63
obj. insert (
63
64
"balance_type" . to_string ( ) ,
64
65
JsonValue :: String ( bal_type. to_string ( ) ) ,
@@ -71,14 +72,14 @@ fn body_to_rows(
71
72
value
72
73
. as_object ( )
73
74
. map ( |v| vec ! [ JsonValue :: Object ( v. clone( ) ) ] )
74
- . unwrap ( )
75
+ . ok_or ( StripeFdwError :: InvalidResponse ) ?
75
76
} ;
76
77
let objs = if is_list {
77
78
value
78
79
. as_object ( )
79
80
. and_then ( |v| v. get ( "data" ) )
80
81
. and_then ( |v| v. as_array ( ) )
81
- . unwrap ( )
82
+ . ok_or ( StripeFdwError :: InvalidResponse ) ?
82
83
} else {
83
84
& single_wrapped
84
85
} ;
@@ -237,10 +238,14 @@ fn set_stats_metadata(stats_metadata: JsonB) {
237
238
238
239
// increase stats metadata 'request_cnt' by 1
239
240
#[ inline]
240
- fn inc_stats_request_cnt ( stats_metadata : & mut JsonB ) {
241
+ fn inc_stats_request_cnt ( stats_metadata : & mut JsonB ) -> StripeFdwResult < ( ) > {
241
242
if let Some ( v) = stats_metadata. 0 . get_mut ( "request_cnt" ) {
242
- * v = ( v. as_i64 ( ) . unwrap ( ) + 1 ) . into ( ) ;
243
+ * v = ( v. as_i64 ( ) . ok_or ( StripeFdwError :: InvalidStats (
244
+ "`request_cnt` is not a number" . to_string ( ) ,
245
+ ) ) ? + 1 )
246
+ . into ( ) ;
243
247
} ;
248
+ Ok ( ( ) )
244
249
}
245
250
246
251
#[ wrappers_fdw(
@@ -628,7 +633,8 @@ impl ForeignDataWrapper<StripeFdwError> for StripeFdw {
628
633
let key_id = require_option ( "api_key_id" , options) ?;
629
634
get_vault_secret ( key_id) . map ( |api_key| create_client ( & api_key) )
630
635
}
631
- } ;
636
+ }
637
+ . transpose ( ) ?;
632
638
633
639
stats:: inc_stats ( Self :: FDW_NAME , stats:: Metric :: CreateTimes , 1 ) ;
634
640
@@ -671,12 +677,11 @@ impl ForeignDataWrapper<StripeFdwError> for StripeFdw {
671
677
while page < page_cnt {
672
678
// build url
673
679
let url = self . build_url ( obj, quals, page_size, & cursor) ?;
674
- if url . is_none ( ) {
680
+ let Some ( url ) = url else {
675
681
return Ok ( ( ) ) ;
676
- }
677
- let url = url. unwrap ( ) ;
682
+ } ;
678
683
679
- inc_stats_request_cnt ( & mut stats_metadata) ;
684
+ inc_stats_request_cnt ( & mut stats_metadata) ? ;
680
685
681
686
// make api call
682
687
let body = self . rt . block_on ( client. get ( url) . send ( ) ) . and_then ( |resp| {
@@ -755,15 +760,15 @@ impl ForeignDataWrapper<StripeFdwError> for StripeFdw {
755
760
756
761
fn insert ( & mut self , src : & Row ) -> StripeFdwResult < ( ) > {
757
762
if let Some ( ref mut client) = self . client {
758
- let url = self . base_url . join ( & self . obj ) . unwrap ( ) ;
763
+ let url = self . base_url . join ( & self . obj ) ? ;
759
764
let body = row_to_body ( src) ?;
760
765
if body. is_null ( ) {
761
766
return Ok ( ( ) ) ;
762
767
}
763
768
764
769
let mut stats_metadata = get_stats_metadata ( ) ;
765
770
766
- inc_stats_request_cnt ( & mut stats_metadata) ;
771
+ inc_stats_request_cnt ( & mut stats_metadata) ? ;
767
772
768
773
// call Stripe API
769
774
let body = self
@@ -798,18 +803,13 @@ impl ForeignDataWrapper<StripeFdwError> for StripeFdw {
798
803
799
804
match rowid {
800
805
Cell :: String ( rowid) => {
801
- let url = self
802
- . base_url
803
- . join ( & format ! ( "{}/" , self . obj) )
804
- . unwrap ( )
805
- . join ( rowid)
806
- . unwrap ( ) ;
806
+ let url = self . base_url . join ( & format ! ( "{}/" , self . obj) ) ?. join ( rowid) ?;
807
807
let body = row_to_body ( new_row) ?;
808
808
if body. is_null ( ) {
809
809
return Ok ( ( ) ) ;
810
810
}
811
811
812
- inc_stats_request_cnt ( & mut stats_metadata) ;
812
+ inc_stats_request_cnt ( & mut stats_metadata) ? ;
813
813
814
814
// call Stripe API
815
815
let body = self
@@ -847,14 +847,9 @@ impl ForeignDataWrapper<StripeFdwError> for StripeFdw {
847
847
848
848
match rowid {
849
849
Cell :: String ( rowid) => {
850
- let url = self
851
- . base_url
852
- . join ( & format ! ( "{}/" , self . obj) )
853
- . unwrap ( )
854
- . join ( rowid)
855
- . unwrap ( ) ;
856
-
857
- inc_stats_request_cnt ( & mut stats_metadata) ;
850
+ let url = self . base_url . join ( & format ! ( "{}/" , self . obj) ) ?. join ( rowid) ?;
851
+
852
+ inc_stats_request_cnt ( & mut stats_metadata) ?;
858
853
859
854
// call Stripe API
860
855
let body = self
0 commit comments