use chrono::{DateTime, TimeZone, Utc};
use crate::protocol::commands;
#[derive(Debug, Clone, PartialEq)]
pub struct SessionInfo {
pub id: String,
pub created_at: DateTime<Utc>,
pub last_activity_at: DateTime<Utc>,
pub user_agent: String,
pub ip: String,
pub country_code: String,
pub current: bool,
pub alive: bool,
}
impl From<commands::SessionInfo> for SessionInfo {
fn from(value: commands::SessionInfo) -> Self {
Self {
id: value.id,
created_at: Utc.timestamp_opt(value.timestamp, 0).unwrap(),
last_activity_at: Utc.timestamp_opt(value.mru, 0).unwrap(),
user_agent: value.user_agent,
ip: value.ip,
country_code: value.country,
current: value.current == 1,
alive: value.alive == 1,
}
}
}
impl From<&commands::SessionInfo> for SessionInfo {
fn from(value: &commands::SessionInfo) -> Self {
Self {
id: value.id.clone(),
created_at: Utc.timestamp_opt(value.timestamp, 0).unwrap(),
last_activity_at: Utc.timestamp_opt(value.mru, 0).unwrap(),
user_agent: value.user_agent.clone(),
ip: value.ip.clone(),
country_code: value.country.clone(),
current: value.current == 1,
alive: value.alive == 1,
}
}
}