use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct TokenData { pub access_token: String, pub refresh_token: String, pub expires_in: i64, pub expiry_timestamp: i64, pub token_type: String, pub email: Option, /// Google Cloud project ID for API requests #[serde(skip_serializing_if = "Option::is_none")] pub project_id: Option, #[serde(skip_serializing_if = "Option::is_none")] pub session_id: Option, } impl TokenData { pub fn new( access_token: String, refresh_token: String, expires_in: i64, email: Option, project_id: Option, session_id: Option, ) -> Self { let expiry_timestamp = chrono::Utc::now().timestamp() + expires_in; Self { access_token, refresh_token, expires_in, expiry_timestamp, token_type: "Bearer".to_string(), email, project_id, session_id, } } }