pub struct LocalStorage { /* private fields */ }Expand description
Local SQLite storage implementation
Uses a shared Database handle and opens a fresh Connection per
operation to avoid libsql connection-sharing hazards under concurrency.
Implementations§
Source§impl LocalStorage
impl LocalStorage
Sourcepub async fn new(db_path: &str) -> Result<Self, StorageError>
pub async fn new(db_path: &str) -> Result<Self, StorageError>
Create a new local storage instance
Sourcepub async fn from_db_and_connection(
db: Database,
_conn: Connection,
) -> Result<Self, StorageError>
pub async fn from_db_and_connection( db: Database, _conn: Connection, ) -> Result<Self, StorageError>
Create from an existing database + connection pair.
The provided connection is intentionally ignored; a fresh connection is opened per operation.
Sourcepub async fn from_connection(_conn: Connection) -> Result<Self, StorageError>
👎Deprecated: use LocalStorage::new(…) or LocalStorage::from_db_and_connection(…)
pub async fn from_connection(_conn: Connection) -> Result<Self, StorageError>
Create from an existing connection.
Deprecated because a bare Connection does not guarantee that its owning
libsql::Database outlives the connection, which can cause crashes.
Trait Implementations§
Source§impl SessionStorage for LocalStorage
impl SessionStorage for LocalStorage
Source§fn list_sessions<'life0, 'life1, 'async_trait>(
&'life0 self,
query: &'life1 ListSessionsQuery,
) -> Pin<Box<dyn Future<Output = Result<ListSessionsResult, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list_sessions<'life0, 'life1, 'async_trait>(
&'life0 self,
query: &'life1 ListSessionsQuery,
) -> Pin<Box<dyn Future<Output = Result<ListSessionsResult, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
List all sessions
Source§fn get_session<'life0, 'async_trait>(
&'life0 self,
session_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<Session, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_session<'life0, 'async_trait>(
&'life0 self,
session_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<Session, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Get a session by ID (includes active checkpoint)
Source§fn create_session<'life0, 'life1, 'async_trait>(
&'life0 self,
request: &'life1 CreateSessionRequest,
) -> Pin<Box<dyn Future<Output = Result<CreateSessionResult, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn create_session<'life0, 'life1, 'async_trait>(
&'life0 self,
request: &'life1 CreateSessionRequest,
) -> Pin<Box<dyn Future<Output = Result<CreateSessionResult, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Create a new session with initial checkpoint
Source§fn update_session<'life0, 'life1, 'async_trait>(
&'life0 self,
session_id: Uuid,
request: &'life1 UpdateSessionRequest,
) -> Pin<Box<dyn Future<Output = Result<Session, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn update_session<'life0, 'life1, 'async_trait>(
&'life0 self,
session_id: Uuid,
request: &'life1 UpdateSessionRequest,
) -> Pin<Box<dyn Future<Output = Result<Session, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Update session metadata (title, visibility)
Source§fn delete_session<'life0, 'async_trait>(
&'life0 self,
session_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn delete_session<'life0, 'async_trait>(
&'life0 self,
session_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<(), StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Delete a session
Source§fn list_checkpoints<'life0, 'life1, 'async_trait>(
&'life0 self,
session_id: Uuid,
query: &'life1 ListCheckpointsQuery,
) -> Pin<Box<dyn Future<Output = Result<ListCheckpointsResult, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list_checkpoints<'life0, 'life1, 'async_trait>(
&'life0 self,
session_id: Uuid,
query: &'life1 ListCheckpointsQuery,
) -> Pin<Box<dyn Future<Output = Result<ListCheckpointsResult, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
List checkpoints for a session
Source§fn get_checkpoint<'life0, 'async_trait>(
&'life0 self,
checkpoint_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<Checkpoint, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_checkpoint<'life0, 'async_trait>(
&'life0 self,
checkpoint_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<Checkpoint, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Get a checkpoint by ID
Source§fn create_checkpoint<'life0, 'life1, 'async_trait>(
&'life0 self,
session_id: Uuid,
request: &'life1 CreateCheckpointRequest,
) -> Pin<Box<dyn Future<Output = Result<Checkpoint, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn create_checkpoint<'life0, 'life1, 'async_trait>(
&'life0 self,
session_id: Uuid,
request: &'life1 CreateCheckpointRequest,
) -> Pin<Box<dyn Future<Output = Result<Checkpoint, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Create a new checkpoint for a session
Source§fn get_active_checkpoint<'life0, 'async_trait>(
&'life0 self,
session_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<Checkpoint, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_active_checkpoint<'life0, 'async_trait>(
&'life0 self,
session_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<Checkpoint, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Get the latest/active checkpoint for a session
Source§fn get_session_stats<'life0, 'async_trait>(
&'life0 self,
_session_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<SessionStats, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_session_stats<'life0, 'async_trait>(
&'life0 self,
_session_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<SessionStats, StorageError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Get session stats (optional - returns default if not supported)
Auto Trait Implementations§
impl !Freeze for LocalStorage
impl !RefUnwindSafe for LocalStorage
impl Send for LocalStorage
impl Sync for LocalStorage
impl Unpin for LocalStorage
impl UnsafeUnpin for LocalStorage
impl !UnwindSafe for LocalStorage
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request