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

Commit 5183672

Browse files
feat(user-management): add reset password error (#44)
1 parent e9df06d commit 5183672

1 file changed

Lines changed: 75 additions & 4 deletions

File tree

src/user_management/operations/reset_password.rs

Lines changed: 75 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use async_trait::async_trait;
2-
use serde::Serialize;
2+
use reqwest::{Response, StatusCode};
3+
use serde::{Deserialize, Serialize};
34
use thiserror::Error;
45

56
use crate::user_management::{PasswordResetToken, User, UserManagement};
@@ -16,15 +17,83 @@ pub struct ResetPasswordParams<'a> {
1617
}
1718

1819
/// An error returned from [`ResetPassword`].
19-
#[derive(Debug, Error)]
20-
pub enum ResetPasswordError {}
20+
#[derive(Debug, Error, Deserialize)]
21+
#[serde(tag = "code", rename_all = "snake_case")]
22+
pub enum ResetPasswordError {
23+
/// Password reset token not found error.
24+
#[error("password_reset_token_not_found: {message}")]
25+
PasswordResetTokenNotFound {
26+
/// A human-readable message describing the error.
27+
message: String,
28+
},
29+
30+
/// Password reset error.
31+
#[error("password_reset_error: {message}")]
32+
PasswordResetError {
33+
/// A human-readable message describing the error.
34+
message: String,
35+
36+
/// List of errors.
37+
errors: Vec<PasswordResetError>,
38+
},
39+
}
2140

2241
impl From<ResetPasswordError> for WorkOsError<ResetPasswordError> {
2342
fn from(err: ResetPasswordError) -> Self {
2443
Self::Operation(err)
2544
}
2645
}
2746

47+
/// Password reset error.
48+
#[derive(Debug, Error, Deserialize, Serialize)]
49+
#[serde(tag = "code", rename_all = "snake_case")]
50+
pub enum PasswordResetError {
51+
/// Password reset token expired error.
52+
#[error("password_reset_token_expired: {message}")]
53+
PasswordResetTokenExpired {
54+
/// A human-readable message describing the error.
55+
message: String,
56+
},
57+
58+
/// Password too weak error.
59+
#[error("password_too_weak: {message}")]
60+
PasswordTooWeak {
61+
/// A human-readable message describing the error.
62+
message: String,
63+
64+
/// Human-readable suggestions.
65+
suggestions: Vec<String>,
66+
67+
/// A human-readable warning.
68+
warning: String,
69+
},
70+
}
71+
72+
#[async_trait]
73+
pub(crate) trait HandleResetPasswordError
74+
where
75+
Self: Sized,
76+
{
77+
async fn handle_reset_password_error(self) -> WorkOsResult<Self, ResetPasswordError>;
78+
}
79+
80+
#[async_trait]
81+
impl HandleResetPasswordError for Response {
82+
async fn handle_reset_password_error(self) -> WorkOsResult<Self, ResetPasswordError> {
83+
match self.error_for_status_ref() {
84+
Ok(_) => Ok(self),
85+
Err(err) => match err.status() {
86+
Some(StatusCode::BAD_REQUEST) | Some(StatusCode::NOT_FOUND) => {
87+
let error = self.json::<ResetPasswordError>().await?;
88+
89+
Err(WorkOsError::Operation(error))
90+
}
91+
_ => Err(WorkOsError::RequestError(err)),
92+
},
93+
}
94+
}
95+
}
96+
2897
/// [WorkOS Docs: Reset the password](https://workos.com/docs/reference/user-management/password-reset/reset-password)
2998
#[async_trait]
3099
pub trait ResetPassword {
@@ -79,7 +148,9 @@ impl ResetPassword for UserManagement<'_> {
79148
.json(&params)
80149
.send()
81150
.await?
82-
.handle_unauthorized_or_generic_error()?
151+
.handle_unauthorized_error()?
152+
.handle_reset_password_error()
153+
.await?
83154
.json::<User>()
84155
.await?;
85156

0 commit comments

Comments
 (0)