1use crate::{
4 error::ErrorMessage,
5 model::{common::AccountID, common::Username},
6};
7use serde::{Deserialize, Serialize};
8use std::convert::TryFrom;
9use std::fmt;
10use time::{serde::timestamp, OffsetDateTime};
11
12#[derive(Clone, Debug, Ord, PartialOrd, Eq, PartialEq, Serialize, Deserialize)]
14#[serde(deny_unknown_fields)]
15pub struct ClientID(pub String);
16
17impl TryFrom<String> for ClientID {
18 type Error = ErrorMessage;
19
20 fn try_from(value: String) -> Result<Self, Self::Error> {
21 if value.is_empty() {
24 return Err(ErrorMessage::new("Invalid length"));
25 }
26
27 Ok(ClientID(value))
28 }
29}
30
31impl fmt::Display for ClientID {
32 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
33 write!(f, "{}", self.0)
34 }
35}
36
37#[derive(Clone, Debug, Ord, PartialOrd, Eq, PartialEq, Serialize, Deserialize)]
39#[serde(deny_unknown_fields)]
40pub struct ClientSecret(pub String);
41
42impl TryFrom<String> for ClientSecret {
43 type Error = ErrorMessage;
44
45 fn try_from(value: String) -> Result<Self, Self::Error> {
46 if value.is_empty() {
49 return Err(ErrorMessage::new("Invalid length"));
50 }
51
52 Ok(ClientSecret(value))
53 }
54}
55
56impl fmt::Display for ClientSecret {
57 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
58 write!(f, "{}", self.0)
59 }
60}
61
62#[derive(Clone, Debug, Ord, PartialOrd, Eq, PartialEq, Serialize, Deserialize)]
69#[serde(deny_unknown_fields)]
70pub struct AccessToken(pub String);
71
72impl TryFrom<String> for AccessToken {
73 type Error = ErrorMessage;
74
75 fn try_from(value: String) -> Result<Self, Self::Error> {
76 if value.is_empty() {
79 return Err(ErrorMessage::new("Invalid length"));
80 }
81
82 Ok(AccessToken(value))
83 }
84}
85
86impl fmt::Display for AccessToken {
87 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
88 write!(f, "{}", self.0)
89 }
90}
91
92#[derive(Clone, Debug, Ord, PartialOrd, Eq, PartialEq, Serialize, Deserialize)]
99#[serde(deny_unknown_fields)]
100pub struct RefreshToken(pub String);
101
102impl TryFrom<String> for RefreshToken {
103 type Error = ErrorMessage;
104
105 fn try_from(value: String) -> Result<Self, Self::Error> {
106 if value.is_empty() {
109 return Err(ErrorMessage::new("Invalid length"));
110 }
111
112 Ok(RefreshToken(value))
113 }
114}
115
116impl fmt::Display for RefreshToken {
117 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
118 write!(f, "{}", self.0)
119 }
120}
121
122#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
127#[serde(deny_unknown_fields)]
128pub struct AuthorizationCode(pub String);
129
130impl TryFrom<String> for AuthorizationCode {
131 type Error = ErrorMessage;
132
133 fn try_from(value: String) -> Result<Self, Self::Error> {
134 if value.is_empty() {
137 return Err(ErrorMessage::new("Invalid length"));
138 }
139
140 Ok(AuthorizationCode(value))
141 }
142}
143
144impl fmt::Display for AuthorizationCode {
145 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
146 write!(f, "{}", self.0)
147 }
148}
149
150#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
156#[serde(deny_unknown_fields)]
157pub struct PINCode(pub String);
158
159impl TryFrom<String> for PINCode {
160 type Error = ErrorMessage;
161
162 fn try_from(value: String) -> Result<Self, Self::Error> {
163 if value.is_empty() {
166 return Err(ErrorMessage::new("Invalid length"));
167 }
168
169 Ok(PINCode(value))
170 }
171}
172
173impl fmt::Display for PINCode {
174 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
175 write!(f, "{}", self.0)
176 }
177}
178
179#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
181#[serde(deny_unknown_fields)]
182pub struct TokenType(pub String);
183
184impl fmt::Display for TokenType {
185 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
186 write!(f, "{}", self.0)
187 }
188}
189
190#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
192#[serde(deny_unknown_fields)]
193pub struct AuthorizationResponse {
194 pub access_token: AccessToken,
196 pub account_id: AccountID,
198 pub account_username: Username,
200 #[serde(with = "timestamp")]
202 pub expires_in: OffsetDateTime,
203 pub refresh_token: RefreshToken,
205 pub scope: serde_json::Value,
207 pub token_type: TokenType,
209}
210
211#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
213#[serde(deny_unknown_fields)]
214pub struct RefreshResponse {
215 pub access_token: AccessToken,
217 pub account_id: AccountID,
219 pub account_username: Username,
221 #[serde(with = "timestamp")]
223 pub expires_in: OffsetDateTime,
224 pub refresh_token: RefreshToken,
226 pub scope: serde_json::Value,
228 pub token_type: TokenType,
230}