1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
use async_trait::async_trait;
use thiserror::Error;
use crate::user_management::{UserId, UserManagement};
use crate::{ResponseExt, WorkOsError, WorkOsResult};
/// An error returned from [`DeleteUser`].
#[derive(Debug, Error)]
pub enum DeleteUserError {}
impl From<DeleteUserError> for WorkOsError<DeleteUserError> {
fn from(err: DeleteUserError) -> Self {
Self::Operation(err)
}
}
/// [WorkOS Docs: Delete a user](https://workos.com/docs/reference/user-management/user/delete)
#[async_trait]
pub trait DeleteUser {
/// Permanently deletes a user in the current environment. It cannot be undone.
///
/// [WorkOS Docs: Delete a user](https://workos.com/docs/reference/user-management/user/delete)
///
/// # Examples
///
/// ```
/// # use workos::WorkOsResult;
/// # use workos::user_management::*;
/// use workos::{ApiKey, WorkOs};
///
/// # async fn run() -> WorkOsResult<(), DeleteUserError> {
/// let workos = WorkOs::new(&ApiKey::from("sk_example_123456789"));
///
/// workos
/// .user_management()
/// .delete_user(&UserId::from("user_01F3GZ5ZGZBZVQGZVHJFVXZJGZ"))
/// .await?;
/// # Ok(())
/// # }
/// ```
async fn delete_user(&self, user_id: &UserId) -> WorkOsResult<(), DeleteUserError>;
}
#[async_trait]
impl DeleteUser for UserManagement<'_> {
async fn delete_user(&self, user_id: &UserId) -> WorkOsResult<(), DeleteUserError> {
let url = self
.workos
.base_url()
.join(&format!("/user_management/users/{user_id}"))?;
self.workos
.client()
.delete(url)
.bearer_auth(self.workos.key())
.send()
.await?
.handle_unauthorized_or_generic_error()
.await?;
Ok(())
}
}
#[cfg(test)]
mod test {
use tokio;
use super::*;
use crate::{ApiKey, WorkOs};
use matches::assert_matches;
#[tokio::test]
async fn it_calls_the_delete_user_endpoint() {
let mut server = mockito::Server::new_async().await;
let workos = WorkOs::builder(&ApiKey::from("sk_example_123456789"))
.base_url(&server.url())
.unwrap()
.build();
server
.mock(
"DELETE",
"/user_management/users/user_01F3GZ5ZGZBZVQGZVHJFVXZJGZ",
)
.match_header("Authorization", "Bearer sk_example_123456789")
.with_status(202)
.create_async()
.await;
let result = workos
.user_management()
.delete_user(&UserId::from("user_01F3GZ5ZGZBZVQGZVHJFVXZJGZ"))
.await;
assert_matches!(result, Ok(()));
}
}