auth0_integration/models/update_user_request.rs
1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4/// Fields accepted by Auth0 PATCH /api/v2/users/{id}.
5/// All fields are optional — only non-None fields are serialized.
6#[derive(Serialize, Deserialize, Default)]
7pub struct UpdateUserRequest {
8 #[serde(skip_serializing_if = "Option::is_none")]
9 pub email: Option<String>,
10 #[serde(skip_serializing_if = "Option::is_none")]
11 pub email_verified: Option<bool>,
12 #[serde(skip_serializing_if = "Option::is_none")]
13 pub verify_email: Option<bool>,
14 #[serde(skip_serializing_if = "Option::is_none")]
15 pub phone_number: Option<String>,
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub phone_verified: Option<bool>,
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub name: Option<String>,
20 #[serde(skip_serializing_if = "Option::is_none")]
21 pub given_name: Option<String>,
22 #[serde(skip_serializing_if = "Option::is_none")]
23 pub family_name: Option<String>,
24 #[serde(skip_serializing_if = "Option::is_none")]
25 pub nickname: Option<String>,
26 #[serde(skip_serializing_if = "Option::is_none")]
27 pub picture: Option<String>,
28 #[serde(skip_serializing_if = "Option::is_none")]
29 pub username: Option<String>,
30 #[serde(skip_serializing_if = "Option::is_none")]
31 pub password: Option<String>,
32 #[serde(skip_serializing_if = "Option::is_none")]
33 pub verify_password: Option<bool>,
34 #[serde(skip_serializing_if = "Option::is_none")]
35 pub blocked: Option<bool>,
36 #[serde(skip_serializing_if = "Option::is_none")]
37 pub connection: Option<String>,
38 #[serde(skip_serializing_if = "Option::is_none")]
39 pub user_metadata: Option<Value>,
40 #[serde(skip_serializing_if = "Option::is_none")]
41 pub app_metadata: Option<Value>,
42}
43
44impl UpdateUserRequest {
45 /// Creates a new empty `UpdateUserRequest` with all fields set to `None`.
46 ///
47 /// After construction, set the fields you want to update directly on the struct.
48 /// Only fields set to `Some(...)` are sent to Auth0 — the rest are omitted.
49 ///
50 /// # Fields
51 ///
52 /// | Field | Type | Description |
53 /// |------------------|---------------------|--------------------------------------------------------------|
54 /// | `email` | `Option<String>` | New email address for the user |
55 /// | `email_verified` | `Option<bool>` | Whether the email has been verified |
56 /// | `verify_email` | `Option<bool>` | If `true`, sends a verification email after update |
57 /// | `phone_number` | `Option<String>` | Phone number in E.164 format (e.g. `+15551234567`) |
58 /// | `phone_verified` | `Option<bool>` | Whether the phone number has been verified |
59 /// | `name` | `Option<String>` | Full display name |
60 /// | `given_name` | `Option<String>` | First name |
61 /// | `family_name` | `Option<String>` | Last name |
62 /// | `nickname` | `Option<String>` | Preferred short name |
63 /// | `picture` | `Option<String>` | URL of the user's profile picture |
64 /// | `username` | `Option<String>` | Username (only for connections that support it) |
65 /// | `password` | `Option<String>` | New password (only for database connections) |
66 /// | `verify_password`| `Option<bool>` | If `true`, sends a password-change confirmation email |
67 /// | `blocked` | `Option<bool>` | If `true`, the user is blocked from logging in |
68 /// | `connection` | `Option<String>` | Connection name the update applies to |
69 /// | `user_metadata` | `Option<Value>` | Arbitrary JSON object editable by the user |
70 /// | `app_metadata` | `Option<Value>` | Arbitrary JSON object editable only by the application |
71 ///
72 /// # Example
73 ///
74 /// ```rust
75 /// use auth0_integration::models::UpdateUserRequest;
76 ///
77 /// let req = UpdateUserRequest::new();
78 /// // req.name = Some("Jane Doe".to_string());
79 /// // req.blocked = Some(false);
80 /// ```
81 pub fn new() -> Self {
82 Self::default()
83 }
84}