use serde::{Deserialize, Serialize};
use crate::Result;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InitData {
pub query_id: String,
pub user: Option<UserData>,
pub auth_date: i32,
pub hash: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserData {
pub id: i64,
pub is_bot: bool,
pub first_name: String,
pub last_name: Option<String>,
pub username: Option<String>,
pub language_code: Option<String>,
}
impl InitData {
pub fn parse(raw_data: &str) -> Result<Self> {
todo!("InitData parsing not yet implemented")
}
pub fn validate(&self, bot_token: &str) -> Result<bool> {
todo!("InitData validation not yet implemented")
}
pub fn get_user(&self) -> Option<&UserData> {
self.user.as_ref()
}
pub fn is_valid_timestamp(&self) -> bool {
todo!("Timestamp validation not yet implemented")
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_init_data_structure() {
let user_data = UserData {
id: 123456,
is_bot: false,
first_name: "John".to_string(),
last_name: Some("Doe".to_string()),
username: Some("johndoe".to_string()),
language_code: Some("en".to_string()),
};
let init_data = InitData {
query_id: "query123".to_string(),
user: Some(user_data),
auth_date: 1234567890,
hash: "abc123hash".to_string(),
};
assert_eq!(init_data.query_id, "query123");
assert!(init_data.user.is_some());
}
}