1use async_trait::async_trait;
4use std::fmt::Debug;
5
6use crate::error::Result;
7use crate::items::{Message, RunItem};
8
9#[async_trait]
11pub trait Session: Send + Sync + Debug {
12 fn session_id(&self) -> &str;
14
15 async fn get_items(&self, limit: Option<usize>) -> Result<Vec<RunItem>>;
17
18 async fn add_items(&self, items: Vec<RunItem>) -> Result<()>;
20
21 async fn pop_item(&self) -> Result<Option<RunItem>>;
23
24 async fn clear_session(&self) -> Result<()>;
26
27 async fn get_messages(&self, limit: Option<usize>) -> Result<Vec<Message>> {
29 let items = self.get_items(limit).await?;
30 Ok(crate::items::ItemHelpers::to_messages(&items))
31 }
32}