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

Commit 70de8ce

Browse files
feat(user-management): add get user
1 parent e82198a commit 70de8ce

4 files changed

Lines changed: 127 additions & 2 deletions

File tree

src/user_management/operations.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ mod authenticate_with_totp;
77
mod create_magic_auth;
88
mod create_password_reset;
99
mod create_user;
10+
mod delete_user;
1011
mod enroll_auth_factor;
1112
mod get_authorization_url;
1213
mod get_email_verification;
@@ -15,6 +16,7 @@ mod get_jwks_url;
1516
mod get_logout_url;
1617
mod get_magic_auth;
1718
mod get_password_reset;
19+
mod get_user;
1820
mod get_user_identities;
1921
mod list_auth_factors;
2022
mod list_users;
@@ -30,6 +32,7 @@ pub use authenticate_with_totp::*;
3032
pub use create_magic_auth::*;
3133
pub use create_password_reset::*;
3234
pub use create_user::*;
35+
pub use delete_user::*;
3336
pub use enroll_auth_factor::*;
3437
pub use get_authorization_url::*;
3538
pub use get_email_verification::*;
@@ -38,6 +41,7 @@ pub use get_jwks_url::*;
3841
pub use get_logout_url::*;
3942
pub use get_magic_auth::*;
4043
pub use get_password_reset::*;
44+
pub use get_user::*;
4145
pub use get_user_identities::*;
4246
pub use list_auth_factors::*;
4347
pub use list_users::*;

src/user_management/operations/create_user.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ impl From<CreateUserError> for WorkOsError<CreateUserError> {
4444
/// [WorkOS Docs: Create an User](https://workos.com/docs/reference/user-management/user/create)
4545
#[async_trait]
4646
pub trait CreateUser {
47-
/// Creates an [`User`].
47+
/// Create a new user in the current environment.
4848
///
4949
/// [WorkOS Docs: Create an User](https://workos.com/docs/reference/user-management/user/create)
5050
///
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
use async_trait::async_trait;
2+
use thiserror::Error;
3+
4+
use crate::user_management::{User, UserId, UserManagement};
5+
use crate::{ResponseExt, WorkOsError, WorkOsResult};
6+
7+
/// An error returned from [`GetUser`].
8+
#[derive(Debug, Error)]
9+
pub enum GetUserError {}
10+
11+
impl From<GetUserError> for WorkOsError<GetUserError> {
12+
fn from(err: GetUserError) -> Self {
13+
Self::Operation(err)
14+
}
15+
}
16+
17+
/// [WorkOS Docs: Get a user](https://workos.com/docs/reference/user-management/user/get)
18+
#[async_trait]
19+
pub trait GetUser {
20+
/// Get the details of an existing user.
21+
///
22+
/// [WorkOS Docs: Get a user](https://workos.com/docs/reference/user-management/user/get)
23+
///
24+
/// # Examples
25+
///
26+
/// ```
27+
/// # use workos_sdk::WorkOsResult;
28+
/// # use workos_sdk::user_management::*;
29+
/// use workos_sdk::{ApiKey, WorkOs};
30+
///
31+
/// # async fn run() -> WorkOsResult<(), GetUserError> {
32+
/// let workos = WorkOs::new(&ApiKey::from("sk_example_123456789"));
33+
///
34+
/// let user = workos
35+
/// .user_management()
36+
/// .get_user(&UserId::from("user_01E4ZCR3C56J083X43JQXF3JK5"))
37+
/// .await?;
38+
/// # Ok(())
39+
/// # }
40+
/// ```
41+
async fn get_user(&self, id: &UserId) -> WorkOsResult<User, GetUserError>;
42+
}
43+
44+
#[async_trait]
45+
impl GetUser for UserManagement<'_> {
46+
async fn get_user(&self, id: &UserId) -> WorkOsResult<User, GetUserError> {
47+
let url = self
48+
.workos
49+
.base_url()
50+
.join(&format!("/user_management/users/{id}", id = id))?;
51+
let user = self
52+
.workos
53+
.client()
54+
.get(url)
55+
.bearer_auth(self.workos.key())
56+
.send()
57+
.await?
58+
.handle_unauthorized_or_generic_error()?
59+
.json::<User>()
60+
.await?;
61+
62+
Ok(user)
63+
}
64+
}
65+
66+
#[cfg(test)]
67+
mod test {
68+
use serde_json::json;
69+
use tokio;
70+
71+
use crate::{ApiKey, WorkOs};
72+
73+
use super::*;
74+
75+
#[tokio::test]
76+
async fn it_calls_the_get_user_endpoint() {
77+
let mut server = mockito::Server::new_async().await;
78+
79+
let workos = WorkOs::builder(&ApiKey::from("sk_example_123456789"))
80+
.base_url(&server.url())
81+
.unwrap()
82+
.build();
83+
84+
server
85+
.mock(
86+
"GET",
87+
"/user_management/users/user_01E4ZCR3C56J083X43JQXF3JK5",
88+
)
89+
.match_header("Authorization", "Bearer sk_example_123456789")
90+
.with_status(200)
91+
.with_body(
92+
json!({
93+
"object": "user",
94+
"id": "user_01E4ZCR3C56J083X43JQXF3JK5",
95+
"email": "marcelina.davis@example.com",
96+
"first_name": "Marcelina",
97+
"last_name": "Davis",
98+
"email_verified": true,
99+
"profile_picture_url": "https://workoscdn.com/images/v1/123abc",
100+
"last_sign_in_at": "2021-06-25T19:07:33.155Z",
101+
"external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222",
102+
"metadata": {
103+
"language": "en"
104+
},
105+
"created_at": "2021-06-25T19:07:33.155Z",
106+
"updated_at": "2021-06-25T19:07:33.155Z"
107+
})
108+
.to_string(),
109+
)
110+
.create_async()
111+
.await;
112+
113+
let user = workos
114+
.user_management()
115+
.get_user(&UserId::from("user_01E4ZCR3C56J083X43JQXF3JK5"))
116+
.await
117+
.unwrap();
118+
119+
assert_eq!(user.id, UserId::from("user_01E4ZCR3C56J083X43JQXF3JK5"))
120+
}
121+
}

src/user_management/operations/update_user.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ impl From<UpdateUserError> for WorkOsError<UpdateUserError> {
4848
/// [WorkOS Docs: Update a user](https://workos.com/docs/reference/user-management/user/update)
4949
#[async_trait]
5050
pub trait UpdateUser {
51-
/// Update a [`User`].
51+
/// Updates properties of a user. The omitted properties will be left unchanged.
5252
///
5353
/// [WorkOS Docs: Update a user](https://workos.com/docs/reference/user-management/user/update)
5454
///

0 commit comments

Comments
 (0)