use crate::session::types::Session;
#[async_trait::async_trait]
pub trait Storage: Send + Sync {
async fn save_session(&self, session: &Session) -> std::io::Result<()>;
async fn load_session(&self, session_id: &str) -> std::io::Result<Option<Session>>;
async fn delete_session(&self, session_id: &str) -> std::io::Result<bool>;
async fn save_runtime_state(&self, session: &Session) -> std::io::Result<()> {
self.save_session(session).await
}
async fn load_runtime_control_plane(
&self,
session_id: &str,
) -> std::io::Result<Option<Session>> {
self.load_session(session_id).await
}
async fn list_child_run_statuses(
&self,
parent_session_id: &str,
) -> std::io::Result<Vec<(String, Option<String>)>> {
let _ = parent_session_id;
Ok(Vec::new())
}
async fn append_token_usage_record(
&self,
session_id: &str,
json_line: &str,
) -> std::io::Result<()> {
let _ = (session_id, json_line);
Ok(())
}
}
#[async_trait::async_trait]
pub trait AttachmentReader: Send + Sync {
async fn read_attachment(
&self,
session_id: &str,
attachment_id: &str,
) -> std::io::Result<Option<(Vec<u8>, String)>>;
}