1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Serialize, Deserialize, Default)]
7#[serde(rename_all = "camelCase")]
8pub struct UserRecord {
9 pub local_id: String,
11 pub email: Option<String>,
13 pub email_verified: bool,
15 pub display_name: Option<String>,
17 pub photo_url: Option<String>,
19 pub phone_number: Option<String>,
21 pub disabled: bool,
23 pub metadata: Option<UserMetadata>,
25 pub provider_user_info: Option<Vec<ProviderUserInfo>>,
27 pub password_hash: Option<String>,
29 pub password_salt: Option<String>,
31 pub custom_attributes: Option<String>,
33 pub tenant_id: Option<String>,
35 pub mfa_info: Option<Vec<MfaInfo>>,
37}
38
39#[derive(Debug, Serialize, Deserialize, Default)]
41#[serde(rename_all = "camelCase")]
42pub struct UserMetadata {
43 pub last_sign_in_time: Option<String>,
45 pub creation_time: Option<String>,
47 pub last_refresh_time: Option<String>,
49}
50
51#[derive(Debug, Serialize, Deserialize, Default)]
53#[serde(rename_all = "camelCase")]
54pub struct ProviderUserInfo {
55 pub provider_id: String,
57 pub display_name: Option<String>,
59 pub photo_url: Option<String>,
61 pub federated_id: Option<String>,
63 pub email: Option<String>,
65 pub raw_id: Option<String>,
67 pub screen_name: Option<String>,
69}
70
71#[derive(Debug, Serialize, Deserialize, Default)]
73#[serde(rename_all = "camelCase")]
74pub struct MfaInfo {
75 pub mfa_enrollment_id: Option<String>,
77 pub display_name: Option<String>,
79 pub phone_info: Option<String>,
81 pub enrolled_at: Option<String>,
83}
84
85#[derive(Debug, Serialize, Default)]
87#[serde(rename_all = "camelCase")]
88pub struct CreateUserRequest {
89 #[serde(skip_serializing_if = "Option::is_none")]
91 pub local_id: Option<String>,
92 #[serde(skip_serializing_if = "Option::is_none")]
94 pub email: Option<String>,
95 #[serde(skip_serializing_if = "Option::is_none")]
97 pub email_verified: Option<bool>,
98 #[serde(skip_serializing_if = "Option::is_none")]
100 pub password: Option<String>,
101 #[serde(skip_serializing_if = "Option::is_none")]
103 pub display_name: Option<String>,
104 #[serde(skip_serializing_if = "Option::is_none")]
106 pub photo_url: Option<String>,
107 #[serde(skip_serializing_if = "Option::is_none")]
109 pub disabled: Option<bool>,
110 #[serde(skip_serializing_if = "Option::is_none")]
112 pub phone_number: Option<String>,
113}
114
115#[derive(Debug, Serialize, Default)]
117#[serde(rename_all = "camelCase")]
118pub struct UpdateUserRequest {
119 pub local_id: String,
121 #[serde(skip_serializing_if = "Option::is_none")]
123 pub email: Option<String>,
124 #[serde(skip_serializing_if = "Option::is_none")]
126 pub email_verified: Option<bool>,
127 #[serde(skip_serializing_if = "Option::is_none")]
129 pub password: Option<String>,
130 #[serde(skip_serializing_if = "Option::is_none")]
132 pub display_name: Option<String>,
133 #[serde(skip_serializing_if = "Option::is_none")]
135 pub photo_url: Option<String>,
136 #[serde(skip_serializing_if = "Option::is_none")]
138 pub disabled: Option<bool>,
139 #[serde(skip_serializing_if = "Option::is_none")]
141 pub phone_number: Option<String>,
142 #[serde(skip_serializing_if = "Option::is_none")]
144 pub custom_attributes: Option<String>,
145 #[serde(skip_serializing_if = "Option::is_none")]
147 pub valid_since: Option<String>,
148 #[serde(skip_serializing_if = "Option::is_none")]
150 pub delete_attribute: Option<Vec<String>>,
151 #[serde(skip_serializing_if = "Option::is_none")]
153 pub delete_provider: Option<Vec<String>>,
154}
155
156#[derive(Debug, Deserialize)]
158#[serde(rename_all = "camelCase")]
159pub struct ListUsersResponse {
160 pub users: Option<Vec<UserRecord>>,
162 pub next_page_token: Option<String>,
164}
165
166#[derive(Debug, Serialize)]
168#[serde(rename_all = "camelCase")]
169pub struct GetAccountInfoRequest {
170 #[serde(skip_serializing_if = "Option::is_none")]
171 pub local_id: Option<Vec<String>>,
172 #[serde(skip_serializing_if = "Option::is_none")]
173 pub email: Option<Vec<String>>,
174 #[serde(skip_serializing_if = "Option::is_none")]
175 pub phone_number: Option<Vec<String>>,
176}
177
178#[derive(Debug, Deserialize)]
180#[serde(rename_all = "camelCase")]
181pub struct GetAccountInfoResponse {
182 pub users: Option<Vec<UserRecord>>,
183}
184
185#[derive(Debug, Serialize)]
187#[serde(rename_all = "camelCase")]
188pub struct DeleteAccountRequest {
189 pub local_id: String,
190}
191
192#[derive(Debug, Serialize, Default)]
194#[serde(rename_all = "camelCase")]
195pub struct EmailLinkRequest {
196 pub request_type: String,
197 #[serde(skip_serializing_if = "Option::is_none")]
198 pub email: Option<String>,
199 #[serde(skip_serializing_if = "Option::is_none")]
200 pub continue_url: Option<String>,
201 #[serde(skip_serializing_if = "Option::is_none")]
202 pub can_handle_code_in_app: Option<bool>,
203 #[serde(skip_serializing_if = "Option::is_none")]
204 pub dynamic_link_domain: Option<String>,
205 #[serde(skip_serializing_if = "Option::is_none")]
206 pub android_package_name: Option<String>,
207 #[serde(skip_serializing_if = "Option::is_none")]
208 pub android_minimum_version: Option<String>,
209 #[serde(skip_serializing_if = "Option::is_none")]
210 pub android_install_app: Option<bool>,
211 #[serde(rename = "iOSBundleId", skip_serializing_if = "Option::is_none")]
212 pub ios_bundle_id: Option<String>,
213}
214
215#[derive(Debug, Deserialize)]
217#[serde(rename_all = "camelCase")]
218pub struct EmailLinkResponse {
219 pub email: Option<String>,
220 pub oob_link: String,
221}
222
223#[derive(Debug, Serialize, Default)]
225#[serde(rename_all = "camelCase")]
226pub struct UserImportRecord {
227 pub local_id: String,
229 #[serde(skip_serializing_if = "Option::is_none")]
231 pub email: Option<String>,
232 #[serde(skip_serializing_if = "Option::is_none")]
234 pub email_verified: Option<bool>,
235 #[serde(skip_serializing_if = "Option::is_none")]
237 pub password_hash: Option<String>,
238 #[serde(skip_serializing_if = "Option::is_none")]
240 pub password_salt: Option<String>,
241 #[serde(skip_serializing_if = "Option::is_none")]
243 pub display_name: Option<String>,
244 #[serde(skip_serializing_if = "Option::is_none")]
246 pub photo_url: Option<String>,
247 #[serde(skip_serializing_if = "Option::is_none")]
249 pub disabled: Option<bool>,
250 #[serde(skip_serializing_if = "Option::is_none")]
252 pub phone_number: Option<String>,
253 #[serde(skip_serializing_if = "Option::is_none")]
255 pub custom_attributes: Option<String>,
256}
257
258#[derive(Debug, Serialize)]
260#[serde(rename_all = "camelCase")]
261pub struct ImportUsersRequest {
262 pub users: Vec<UserImportRecord>,
264 #[serde(skip_serializing_if = "Option::is_none")]
266 pub hash: Option<UserImportHash>,
267}
268
269#[derive(Debug, Serialize)]
271#[serde(rename_all = "camelCase")]
272pub struct UserImportHash {
273 pub hash_algorithm: String,
275 pub key: String,
277 pub salt_separator: String,
279 pub rounds: i32,
281 pub memory_cost: i32,
283}
284
285#[derive(Debug, Deserialize)]
287#[serde(rename_all = "camelCase")]
288pub struct ImportUsersResponse {
289 pub error: Option<Vec<ImportUserError>>,
291}
292
293#[derive(Debug, Deserialize)]
295#[serde(rename_all = "camelCase")]
296pub struct ImportUserError {
297 pub index: usize,
299 pub message: String,
301}
302
303#[derive(Debug, Serialize)]
305#[serde(rename_all = "camelCase")]
306pub struct CreateSessionCookieRequest {
307 pub id_token: String,
309 #[serde(rename = "validDuration")]
311 pub valid_duration_seconds: u64,
312}
313
314#[derive(Debug, Deserialize)]
316#[serde(rename_all = "camelCase")]
317pub struct CreateSessionCookieResponse {
318 pub session_cookie: String,
320}
321
322#[derive(Debug, Serialize, Deserialize, Default, Clone)]
326#[serde(rename_all = "camelCase")]
327pub struct ActionCodeSettings {
328 pub url: String,
330 #[serde(skip_serializing_if = "Option::is_none")]
332 pub handle_code_in_app: Option<bool>,
333 #[serde(rename = "iOS", skip_serializing_if = "Option::is_none")]
335 pub ios: Option<IosSettings>,
336 #[serde(skip_serializing_if = "Option::is_none")]
338 pub android: Option<AndroidSettings>,
339 #[serde(skip_serializing_if = "Option::is_none")]
341 pub dynamic_link_domain: Option<String>,
342}
343
344#[derive(Debug, Serialize, Deserialize, Default, Clone)]
346#[serde(rename_all = "camelCase")]
347pub struct IosSettings {
348 pub bundle_id: String,
350}
351
352#[derive(Debug, Serialize, Deserialize, Default, Clone)]
354#[serde(rename_all = "camelCase")]
355pub struct AndroidSettings {
356 pub package_name: String,
358 #[serde(skip_serializing_if = "Option::is_none")]
360 pub install_app: Option<bool>,
361 #[serde(skip_serializing_if = "Option::is_none")]
363 pub minimum_version: Option<String>,
364}