@@ -27,11 +27,8 @@ impl gleam_core::io::HttpClient for HttpClient {
27
27
let request = request
28
28
. try_into ( )
29
29
. expect ( "Unable to convert HTTP request for use by reqwest library" ) ;
30
- let mut response = REQWEST_CLIENT
31
- . get_or_init ( || init_client ( ) . expect ( "Unable to create reqwest client" ) )
32
- . execute ( request)
33
- . await
34
- . map_err ( Error :: http) ?;
30
+ let client = init_client ( ) . map_err ( Error :: http) ?;
31
+ let mut response = client. execute ( request) . await . map_err ( Error :: http) ?;
35
32
let mut builder = Response :: builder ( )
36
33
. status ( response. status ( ) )
37
34
. version ( response. version ( ) ) ;
@@ -44,21 +41,31 @@ impl gleam_core::io::HttpClient for HttpClient {
44
41
}
45
42
}
46
43
47
- fn init_client ( ) -> Result < Client , Error > {
44
+ fn init_client ( ) -> Result < & ' static Client , Error > {
45
+ if let Some ( client) = REQWEST_CLIENT . get ( ) {
46
+ return Ok ( client) ;
47
+ }
48
+
48
49
let certificate_path = std:: env:: var ( "GLEAM_CACERTS_PATH" )
49
50
. map_err ( |_| Error :: CannotReadCertificate { path : "" . into ( ) } ) ?;
51
+
50
52
let certificate_bytes =
51
53
std:: fs:: read ( & certificate_path) . map_err ( |_| Error :: CannotReadCertificate {
52
54
path : certificate_path. clone ( ) ,
53
55
} ) ?;
56
+
54
57
let certificate =
55
58
Certificate :: from_pem ( & certificate_bytes) . map_err ( |_| Error :: CannotReadCertificate {
56
59
path : certificate_path. clone ( ) ,
57
60
} ) ?;
58
- Client :: builder ( )
59
- . add_root_certificate ( certificate)
60
- . build ( )
61
- . map_err ( |_| Error :: CannotReadCertificate {
62
- path : certificate_path,
63
- } )
61
+
62
+ match Client :: builder ( ) . add_root_certificate ( certificate) . build ( ) {
63
+ Ok ( client) => {
64
+ let _ = REQWEST_CLIENT . set ( client) ;
65
+ Ok ( REQWEST_CLIENT . get ( ) . expect ( "This should never fail" ) )
66
+ }
67
+ Err ( e) => Err ( Error :: CannotReadCertificate {
68
+ path : certificate_path. clone ( ) ,
69
+ } ) ,
70
+ }
64
71
}
0 commit comments