1use crate::{Event, Session};
2use adk_core::Result;
3use async_trait::async_trait;
4use chrono::{DateTime, Utc};
5use serde_json::Value;
6use std::collections::HashMap;
7
8#[derive(Debug, Clone)]
9pub struct CreateRequest {
10 pub app_name: String,
11 pub user_id: String,
12 pub session_id: Option<String>,
13 pub state: HashMap<String, Value>,
14}
15
16#[derive(Debug, Clone)]
17pub struct GetRequest {
18 pub app_name: String,
19 pub user_id: String,
20 pub session_id: String,
21 pub num_recent_events: Option<usize>,
22 pub after: Option<DateTime<Utc>>,
23}
24
25#[derive(Debug, Clone)]
26pub struct ListRequest {
27 pub app_name: String,
28 pub user_id: String,
29}
30
31#[derive(Debug, Clone)]
32pub struct DeleteRequest {
33 pub app_name: String,
34 pub user_id: String,
35 pub session_id: String,
36}
37
38#[async_trait]
39pub trait SessionService: Send + Sync {
40 async fn create(&self, req: CreateRequest) -> Result<Box<dyn Session>>;
41 async fn get(&self, req: GetRequest) -> Result<Box<dyn Session>>;
42 async fn list(&self, req: ListRequest) -> Result<Vec<Box<dyn Session>>>;
43 async fn delete(&self, req: DeleteRequest) -> Result<()>;
44 async fn append_event(&self, session_id: &str, event: Event) -> Result<()>;
45}