use std::io;
use swink_agent::{AgentMessage, CustomMessageRegistry};
use crate::entry::SessionEntry;
use crate::interrupt::InterruptState;
use crate::load_options::LoadOptions;
use crate::meta::SessionMeta;
pub trait SessionStore: Send + Sync {
fn save(&self, id: &str, meta: &SessionMeta, messages: &[AgentMessage]) -> io::Result<()>;
fn append(&self, id: &str, messages: &[AgentMessage]) -> io::Result<()>;
fn load(
&self,
id: &str,
registry: Option<&CustomMessageRegistry>,
) -> io::Result<(SessionMeta, Vec<AgentMessage>)>;
fn list(&self) -> io::Result<Vec<SessionMeta>>;
fn delete(&self, id: &str) -> io::Result<()>;
fn save_state(&self, id: &str, state: &serde_json::Value) -> io::Result<()> {
let _ = (id, state);
Ok(())
}
fn load_state(&self, id: &str) -> io::Result<Option<serde_json::Value>> {
let _ = id;
Ok(None)
}
fn save_interrupt(&self, id: &str, state: &InterruptState) -> io::Result<()> {
let _ = (id, state);
Ok(())
}
fn load_interrupt(&self, id: &str) -> io::Result<Option<InterruptState>> {
let _ = id;
Ok(None)
}
fn clear_interrupt(&self, id: &str) -> io::Result<()> {
let _ = id;
Ok(())
}
fn load_with_options(
&self,
id: &str,
options: &LoadOptions,
) -> io::Result<(SessionMeta, Vec<SessionEntry>)>;
}