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 #[serde(default)]
23 pub disabled: bool,
24 pub metadata: Option<UserMetadata>,
26 pub provider_user_info: Option<Vec<ProviderUserInfo>>,
28 pub password_hash: Option<String>,
30 pub password_salt: Option<String>,
32 pub custom_attributes: Option<String>,
34 pub tenant_id: Option<String>,
36 pub mfa_info: Option<Vec<MfaInfo>>,
38}
39
40#[derive(Debug, Serialize, Deserialize, Default)]
42#[serde(rename_all = "camelCase")]
43pub struct UserMetadata {
44 pub last_sign_in_time: Option<String>,
46 pub creation_time: Option<String>,
48 pub last_refresh_time: Option<String>,
50}
51
52#[derive(Debug, Serialize, Deserialize, Default)]
54#[serde(rename_all = "camelCase")]
55pub struct ProviderUserInfo {
56 pub provider_id: String,
58 pub display_name: Option<String>,
60 pub photo_url: Option<String>,
62 pub federated_id: Option<String>,
64 pub email: Option<String>,
66 pub raw_id: Option<String>,
68 pub screen_name: Option<String>,
70}
71
72#[derive(Debug, Serialize, Deserialize, Default)]
74#[serde(rename_all = "camelCase")]
75pub struct MfaInfo {
76 pub mfa_enrollment_id: Option<String>,
78 pub display_name: Option<String>,
80 pub phone_info: Option<String>,
82 pub enrolled_at: Option<String>,
84}
85
86#[derive(Debug, Serialize, Default)]
88#[serde(rename_all = "camelCase")]
89pub struct CreateUserRequest {
90 #[serde(skip_serializing_if = "Option::is_none")]
92 pub local_id: Option<String>,
93 #[serde(skip_serializing_if = "Option::is_none")]
95 pub email: Option<String>,
96 #[serde(skip_serializing_if = "Option::is_none")]
98 pub email_verified: Option<bool>,
99 #[serde(skip_serializing_if = "Option::is_none")]
101 pub password: Option<String>,
102 #[serde(skip_serializing_if = "Option::is_none")]
104 pub display_name: Option<String>,
105 #[serde(skip_serializing_if = "Option::is_none")]
107 pub photo_url: Option<String>,
108 #[serde(skip_serializing_if = "Option::is_none")]
110 pub disabled: Option<bool>,
111 #[serde(skip_serializing_if = "Option::is_none")]
113 pub phone_number: Option<String>,
114}
115
116#[derive(Debug, Serialize, Default)]
118#[serde(rename_all = "camelCase")]
119pub struct UpdateUserRequest {
120 pub local_id: String,
122 #[serde(skip_serializing_if = "Option::is_none")]
124 pub email: Option<String>,
125 #[serde(skip_serializing_if = "Option::is_none")]
127 pub email_verified: Option<bool>,
128 #[serde(skip_serializing_if = "Option::is_none")]
130 pub password: Option<String>,
131 #[serde(skip_serializing_if = "Option::is_none")]
133 pub display_name: Option<String>,
134 #[serde(skip_serializing_if = "Option::is_none")]
136 pub photo_url: Option<String>,
137 #[serde(skip_serializing_if = "Option::is_none")]
139 pub disabled: Option<bool>,
140 #[serde(skip_serializing_if = "Option::is_none")]
142 pub phone_number: Option<String>,
143 #[serde(skip_serializing_if = "Option::is_none")]
145 pub custom_attributes: Option<String>,
146 #[serde(skip_serializing_if = "Option::is_none")]
148 pub valid_since: Option<String>,
149 #[serde(skip_serializing_if = "Option::is_none")]
151 pub delete_attribute: Option<Vec<String>>,
152 #[serde(skip_serializing_if = "Option::is_none")]
154 pub delete_provider: Option<Vec<String>>,
155}
156
157#[derive(Debug, Deserialize)]
159#[serde(rename_all = "camelCase")]
160pub struct ListUsersResponse {
161 pub users: Option<Vec<UserRecord>>,
163 pub next_page_token: Option<String>,
165}
166
167#[derive(Debug, Serialize)]
169#[serde(rename_all = "camelCase")]
170pub struct GetAccountInfoRequest {
171 #[serde(skip_serializing_if = "Option::is_none")]
172 pub local_id: Option<Vec<String>>,
173 #[serde(skip_serializing_if = "Option::is_none")]
174 pub email: Option<Vec<String>>,
175 #[serde(skip_serializing_if = "Option::is_none")]
176 pub phone_number: Option<Vec<String>>,
177}
178
179#[derive(Debug, Deserialize)]
181#[serde(rename_all = "camelCase")]
182pub struct GetAccountInfoResponse {
183 pub users: Option<Vec<UserRecord>>,
184}
185
186#[derive(Debug, Serialize)]
188#[serde(rename_all = "camelCase")]
189pub struct DeleteAccountRequest {
190 pub local_id: String,
191}
192
193#[derive(Debug, Serialize, Default)]
195#[serde(rename_all = "camelCase")]
196pub struct EmailLinkRequest {
197 pub request_type: String,
198 #[serde(skip_serializing_if = "Option::is_none")]
199 pub email: Option<String>,
200 #[serde(skip_serializing_if = "Option::is_none")]
201 pub continue_url: Option<String>,
202 #[serde(skip_serializing_if = "Option::is_none")]
203 pub can_handle_code_in_app: Option<bool>,
204 #[serde(skip_serializing_if = "Option::is_none")]
205 pub dynamic_link_domain: Option<String>,
206 #[serde(skip_serializing_if = "Option::is_none")]
207 pub android_package_name: Option<String>,
208 #[serde(skip_serializing_if = "Option::is_none")]
209 pub android_minimum_version: Option<String>,
210 #[serde(skip_serializing_if = "Option::is_none")]
211 pub android_install_app: Option<bool>,
212 #[serde(rename = "iOSBundleId", skip_serializing_if = "Option::is_none")]
213 pub ios_bundle_id: Option<String>,
214}
215
216#[derive(Debug, Deserialize)]
218#[serde(rename_all = "camelCase")]
219pub struct EmailLinkResponse {
220 pub email: Option<String>,
221 pub oob_link: String,
222}
223
224#[derive(Debug, Serialize, Default)]
226#[serde(rename_all = "camelCase")]
227pub struct UserImportRecord {
228 pub local_id: String,
230 #[serde(skip_serializing_if = "Option::is_none")]
232 pub email: Option<String>,
233 #[serde(skip_serializing_if = "Option::is_none")]
235 pub email_verified: Option<bool>,
236 #[serde(skip_serializing_if = "Option::is_none")]
238 pub password_hash: Option<String>,
239 #[serde(skip_serializing_if = "Option::is_none")]
241 pub password_salt: Option<String>,
242 #[serde(skip_serializing_if = "Option::is_none")]
244 pub display_name: Option<String>,
245 #[serde(skip_serializing_if = "Option::is_none")]
247 pub photo_url: Option<String>,
248 #[serde(skip_serializing_if = "Option::is_none")]
250 pub disabled: Option<bool>,
251 #[serde(skip_serializing_if = "Option::is_none")]
253 pub phone_number: Option<String>,
254 #[serde(skip_serializing_if = "Option::is_none")]
256 pub custom_attributes: Option<String>,
257}
258
259#[derive(Debug, Serialize)]
261#[serde(rename_all = "camelCase")]
262pub struct ImportUsersRequest {
263 pub users: Vec<UserImportRecord>,
265 #[serde(skip_serializing_if = "Option::is_none")]
267 pub hash: Option<UserImportHash>,
268}
269
270#[derive(Debug, Serialize)]
272#[serde(rename_all = "camelCase")]
273pub struct UserImportHash {
274 pub hash_algorithm: String,
276 pub key: String,
278 pub salt_separator: String,
280 pub rounds: i32,
282 pub memory_cost: i32,
284}
285
286#[derive(Debug, Deserialize)]
288#[serde(rename_all = "camelCase")]
289pub struct ImportUsersResponse {
290 pub error: Option<Vec<ImportUserError>>,
292}
293
294#[derive(Debug, Deserialize)]
296#[serde(rename_all = "camelCase")]
297pub struct ImportUserError {
298 pub index: usize,
300 pub message: String,
302}
303
304#[derive(Debug, Serialize)]
306#[serde(rename_all = "camelCase")]
307pub struct CreateSessionCookieRequest {
308 pub id_token: String,
310 #[serde(rename = "validDuration")]
312 pub valid_duration_seconds: u64,
313}
314
315#[derive(Debug, Deserialize)]
317#[serde(rename_all = "camelCase")]
318pub struct CreateSessionCookieResponse {
319 pub session_cookie: String,
321}
322
323#[derive(Debug, Serialize, Deserialize, Default, Clone)]
327#[serde(rename_all = "camelCase")]
328pub struct ActionCodeSettings {
329 pub url: String,
331 #[serde(skip_serializing_if = "Option::is_none")]
333 pub handle_code_in_app: Option<bool>,
334 #[serde(rename = "iOS", skip_serializing_if = "Option::is_none")]
336 pub ios: Option<IosSettings>,
337 #[serde(skip_serializing_if = "Option::is_none")]
339 pub android: Option<AndroidSettings>,
340 #[serde(skip_serializing_if = "Option::is_none")]
342 pub dynamic_link_domain: Option<String>,
343}
344
345#[derive(Debug, Serialize, Deserialize, Default, Clone)]
347#[serde(rename_all = "camelCase")]
348pub struct IosSettings {
349 pub bundle_id: String,
351}
352
353#[derive(Debug, Serialize, Deserialize, Default, Clone)]
355#[serde(rename_all = "camelCase")]
356pub struct AndroidSettings {
357 pub package_name: String,
359 #[serde(skip_serializing_if = "Option::is_none")]
361 pub install_app: Option<bool>,
362 #[serde(skip_serializing_if = "Option::is_none")]
364 pub minimum_version: Option<String>,
365}