1use std::collections::HashMap;
2use serde::{Deserialize, Serialize};
3use chrono::{DateTime, Utc};
4
5#[allow(missing_docs)]
7#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
8#[serde(rename_all = "camelCase")]
9pub struct AccountData {
10 pub age_group: String,
11 pub can_update_display_name: bool,
12 pub company: String,
13 pub country: String,
14 pub display_name: String,
15 pub email: String,
16 pub email_verified: bool,
17 pub failed_login_attempts: i64,
18 pub headless: bool,
19 pub id: String,
20 pub last_display_name_change: String,
21 pub last_login: String,
22 pub last_name: String,
23 pub minor_expected: bool,
24 pub minor_status: String,
25 pub minor_verified: bool,
26 pub name: String,
27 pub number_of_display_name_changes: i64,
28 pub preferred_language: String,
29 pub tfa_enabled: bool,
30}
31
32#[allow(missing_docs)]
36#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
37pub struct UserData {
38 pub(crate) access_token: Option<String>,
39 pub expires_in: Option<i64>,
40 pub expires_at: Option<DateTime<Utc>>,
41 pub token_type: Option<String>,
42 pub(crate) refresh_token: Option<String>,
43 pub refresh_expires: Option<i64>,
44 pub refresh_expires_at: Option<DateTime<Utc>>,
45 pub account_id: Option<String>,
46 pub client_id: Option<String>,
47 pub internal_client: Option<bool>,
48 pub client_service: Option<String>,
49 #[serde(rename = "displayName")]
50 pub display_name: Option<String>,
51 pub app: Option<String>,
52 pub in_app_id: Option<String>,
53 pub device_id: Option<String>,
54 #[serde(rename = "errorMessage")]
55 pub error_message: Option<String>,
56 #[serde(rename = "errorCode")]
57 pub error_code: Option<String>,
58}
59
60impl UserData {
61 pub fn new() -> Self {
63 UserData {
64 access_token: None,
65 expires_in: None,
66 expires_at: None,
67 token_type: None,
68 refresh_token: None,
69 refresh_expires: None,
70 refresh_expires_at: None,
71 account_id: None,
72 client_id: None,
73 internal_client: None,
74 client_service: None,
75 display_name: None,
76 app: None,
77 in_app_id: None,
78 device_id: None,
79 error_message: None,
80 error_code: None,
81 }
82 }
83
84 pub fn access_token(&self) -> Option<String> {
86 self.access_token.clone()
87 }
88
89 pub fn refresh_token(&self) -> Option<String> {
91 self.refresh_token.clone()
92 }
93
94 pub fn set_access_token(&mut self, token: Option<String>) {
96 self.access_token = token;
97 }
98
99 pub fn set_refresh_token(&mut self, token: Option<String>) {
101 self.refresh_token = token;
102 }
103
104 pub fn update(&mut self, new: UserData) {
106 if let Some(n) = new.access_token {
107 self.access_token = Some(n)
108 }
109 if let Some(n) = new.expires_in {
110 self.expires_in = Some(n)
111 }
112 if let Some(n) = new.expires_at {
113 self.expires_at = Some(n)
114 }
115 if let Some(n) = new.token_type {
116 self.token_type = Some(n)
117 }
118 if let Some(n) = new.refresh_token {
119 self.refresh_token = Some(n)
120 }
121 if let Some(n) = new.refresh_expires {
122 self.refresh_expires = Some(n)
123 }
124 if let Some(n) = new.refresh_expires_at {
125 self.refresh_expires_at = Some(n)
126 }
127 if let Some(n) = new.account_id {
128 self.account_id = Some(n)
129 }
130 if let Some(n) = new.client_id {
131 self.client_id = Some(n)
132 }
133 if let Some(n) = new.internal_client {
134 self.internal_client = Some(n)
135 }
136 if let Some(n) = new.client_service {
137 self.client_service = Some(n)
138 }
139 if let Some(n) = new.display_name {
140 self.display_name = Some(n)
141 }
142 if let Some(n) = new.app {
143 self.app = Some(n)
144 }
145 if let Some(n) = new.in_app_id {
146 self.in_app_id = Some(n)
147 }
148 if let Some(n) = new.device_id {
149 self.device_id = Some(n)
150 }
151 if let Some(n) = new.error_message {
152 self.error_message = Some(n)
153 }
154 if let Some(n) = new.error_code {
155 self.error_code = Some(n)
156 }
157 }
158}
159
160#[allow(missing_docs)]
161#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
162#[serde(rename_all = "camelCase")]
163pub struct AccountInfo {
164 pub display_name: String,
165 pub external_auths: HashMap<String, ExternalAuth>,
166 pub id: String,
167}
168
169#[allow(missing_docs)]
170#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
171#[serde(rename_all = "camelCase")]
172pub struct ExternalAuth {
173 pub account_id: String,
174 pub auth_ids: Vec<AuthId>,
175 pub date_added: Option<String>,
176 pub avatar: Option<String>,
177 pub external_auth_id: Option<String>,
178 pub external_auth_id_type: Option<String>,
179 pub external_display_name: String,
180 #[serde(rename = "type")]
181 pub type_field: String,
182 pub external_auth_secondary_id: Option<String>,
183}
184
185#[allow(missing_docs)]
186#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
187#[serde(rename_all = "camelCase")]
188pub struct AuthId {
189 pub id: String,
190 #[serde(rename = "type")]
191 pub type_field: String,
192}