use serde::{Deserialize, Serialize};
use serde_json::{Map, Value};
use crate::Cancellation;
use crate::components::memory::short::Error;
use crate::components::memory::short::Type;
use crate::components::model::token::Usage;
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "lowercase")]
pub enum Status {
Active,
Archived,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct Session {
pub id: i64,
pub tenant_id: i64,
pub user_id: i64,
pub r#type: Type,
pub title: Option<String>,
pub summary: Option<String>,
pub usage: Option<Usage>,
pub status: Status,
pub metadata: Map<String, Value>,
pub created_time: i64,
pub updated_time: i64,
}
pub trait Store: Send + Sync {
fn create(
&self,
value: Session,
cancellation: &Cancellation,
) -> impl std::future::Future<Output = Result<Session, Error>>;
fn read(
&self,
id: i64,
cancellation: &Cancellation,
) -> impl std::future::Future<Output = Result<Session, Error>>;
fn update(
&self,
value: Session,
cancellation: &Cancellation,
) -> impl std::future::Future<Output = Result<Session, Error>>;
fn delete(
&self,
id: i64,
cancellation: &Cancellation,
) -> impl std::future::Future<Output = Result<(), Error>>;
}