Skip to main content

headless_lms_server/domain/oauth/
token_response.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Serialize, Deserialize, PartialEq, Eq, Clone)]
4pub struct TokenResponse {
5    pub access_token: String,
6    #[serde(skip_serializing_if = "Option::is_none")]
7    pub id_token: Option<String>,
8    #[serde(skip_serializing_if = "Option::is_none")]
9    pub refresh_token: Option<String>,
10    pub token_type: String,
11    pub expires_in: u32,
12    /// The granted scopes, which may be narrower than the requested ones (RFC 6749 ยง5.1).
13    pub scope: String,
14}
15
16impl std::fmt::Debug for TokenResponse {
17    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
18        f.debug_struct("TokenResponse")
19            .field("access_token", &"<redacted>")
20            .field("id_token", &self.id_token.as_ref().map(|_| "<redacted>"))
21            .field(
22                "refresh_token",
23                &self.refresh_token.as_ref().map(|_| "<redacted>"),
24            )
25            .field("token_type", &self.token_type)
26            .field("expires_in", &self.expires_in)
27            .field("scope", &self.scope)
28            .finish()
29    }
30}