adk_session/
service.rs

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}