use serde::{Deserialize, Serialize};
use meerkat_core::{SessionId, SessionInfo, SessionSummary};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WireSessionInfo {
pub session_id: SessionId,
#[serde(skip_serializing_if = "Option::is_none")]
pub session_ref: Option<String>,
pub created_at: u64,
pub updated_at: u64,
pub message_count: usize,
pub is_active: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_assistant_text: Option<String>,
}
impl From<SessionInfo> for WireSessionInfo {
fn from(info: SessionInfo) -> Self {
Self {
session_id: info.session_id,
session_ref: None,
created_at: info
.created_at
.duration_since(std::time::UNIX_EPOCH)
.map(|d| d.as_secs())
.unwrap_or(0),
updated_at: info
.updated_at
.duration_since(std::time::UNIX_EPOCH)
.map(|d| d.as_secs())
.unwrap_or(0),
message_count: info.message_count,
is_active: info.is_active,
last_assistant_text: info.last_assistant_text,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WireSessionSummary {
pub session_id: SessionId,
#[serde(skip_serializing_if = "Option::is_none")]
pub session_ref: Option<String>,
pub created_at: u64,
pub updated_at: u64,
pub message_count: usize,
pub total_tokens: u64,
pub is_active: bool,
}
impl From<SessionSummary> for WireSessionSummary {
fn from(summary: SessionSummary) -> Self {
Self {
session_id: summary.session_id,
session_ref: None,
created_at: summary
.created_at
.duration_since(std::time::UNIX_EPOCH)
.map(|d| d.as_secs())
.unwrap_or(0),
updated_at: summary
.updated_at
.duration_since(std::time::UNIX_EPOCH)
.map(|d| d.as_secs())
.unwrap_or(0),
message_count: summary.message_count,
total_tokens: summary.total_tokens,
is_active: summary.is_active,
}
}
}