Skip to content
This repository was archived by the owner on May 13, 2026. It is now read-only.

Commit 24f4cf0

Browse files
feat: add client option to builder (#230)
1 parent 32d752f commit 24f4cf0

1 file changed

Lines changed: 44 additions & 4 deletions

File tree

src/workos.rs

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

109110
impl<'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)]
154164
mod 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

Comments
 (0)