@@ -104,6 +104,7 @@ pub struct WorkOsBuilder<'a> {
104104 base_url : Url ,
105105 key : & ' a ApiKey ,
106106 client_id : Option < & ' a ClientId > ,
107+ client : Option < reqwest:: Client > ,
107108}
108109
109110impl < ' a > WorkOsBuilder < ' a > {
@@ -113,6 +114,7 @@ impl<'a> WorkOsBuilder<'a> {
113114 base_url : Url :: parse ( "https://api.workos.com" ) . unwrap ( ) ,
114115 key,
115116 client_id : None ,
117+ client : None ,
116118 }
117119 }
118120
@@ -134,12 +136,20 @@ impl<'a> WorkOsBuilder<'a> {
134136 self
135137 }
136138
139+ /// Sets the [`reqwest::Client`] to use.
140+ pub fn client ( mut self , client : reqwest:: Client ) -> Self {
141+ self . client = Some ( client) ;
142+ self
143+ }
144+
137145 /// Consumes the builder and returns the constructed client.
138146 pub fn build ( self ) -> WorkOs {
139- let client = reqwest:: Client :: builder ( )
140- . user_agent ( concat ! ( "workos-rust/" , env!( "CARGO_PKG_VERSION" ) ) )
141- . build ( )
142- . unwrap ( ) ;
147+ let client = self . client . unwrap_or_else ( || {
148+ reqwest:: Client :: builder ( )
149+ . user_agent ( concat ! ( "workos-rust/" , env!( "CARGO_PKG_VERSION" ) ) )
150+ . build ( )
151+ . unwrap ( )
152+ } ) ;
143153
144154 WorkOs {
145155 base_url : self . base_url ,
@@ -152,6 +162,8 @@ impl<'a> WorkOsBuilder<'a> {
152162
153163#[ cfg( test) ]
154164mod test {
165+ use reqwest:: StatusCode ;
166+
155167 use super :: * ;
156168
157169 #[ test]
@@ -202,4 +214,32 @@ mod test {
202214
203215 assert_eq ! ( response_body, "User-Agent correctly set" )
204216 }
217+
218+ #[ tokio:: test]
219+ async fn it_supports_setting_the_reqwest_client ( ) {
220+ let mut server = mockito:: Server :: new_async ( ) . await ;
221+
222+ let workos = WorkOs :: builder ( & ApiKey :: from ( "sk_example_123456789" ) )
223+ . base_url ( & server. url ( ) )
224+ . unwrap ( )
225+ . client (
226+ reqwest:: Client :: builder ( )
227+ . user_agent ( "custom" )
228+ . build ( )
229+ . unwrap ( ) ,
230+ )
231+ . build ( ) ;
232+
233+ server
234+ . mock ( "GET" , "/health" )
235+ . match_header ( "User-Agent" , "custom" )
236+ . with_status ( 204 )
237+ . create_async ( )
238+ . await ;
239+
240+ let url = workos. base_url ( ) . join ( "/health" ) . unwrap ( ) ;
241+ let response = workos. client ( ) . get ( url) . send ( ) . await . unwrap ( ) ;
242+
243+ assert_eq ! ( response. status( ) , StatusCode :: NO_CONTENT ) ;
244+ }
205245}
0 commit comments