pub trait Storage {
Show 20 methods
// Required methods
fn init(&mut self) -> Result<()>;
fn is_initialized(&self) -> Result<bool>;
fn reset(&mut self) -> Result<()>;
fn save_context(&mut self, context: &Context) -> Result<()>;
fn load_context(&self) -> Result<Option<Context>>;
fn delete_context(&mut self) -> Result<()>;
fn add_buffer(&mut self, buffer: &Buffer) -> Result<i64>;
fn get_buffer(&self, id: i64) -> Result<Option<Buffer>>;
fn get_buffer_by_name(&self, name: &str) -> Result<Option<Buffer>>;
fn list_buffers(&self) -> Result<Vec<Buffer>>;
fn update_buffer(&mut self, buffer: &Buffer) -> Result<()>;
fn delete_buffer(&mut self, id: i64) -> Result<()>;
fn buffer_count(&self) -> Result<usize>;
fn add_chunks(&mut self, buffer_id: i64, chunks: &[Chunk]) -> Result<()>;
fn get_chunks(&self, buffer_id: i64) -> Result<Vec<Chunk>>;
fn get_chunk(&self, id: i64) -> Result<Option<Chunk>>;
fn delete_chunks(&mut self, buffer_id: i64) -> Result<()>;
fn chunk_count(&self, buffer_id: i64) -> Result<usize>;
fn export_buffers(&self) -> Result<String>;
fn stats(&self) -> Result<StorageStats>;
}Expand description
Trait for persistent storage backends.
Implementations handle storage of RLM state including contexts, buffers, and chunks. All operations should be atomic where appropriate.
Note: This trait does not require Send + Sync as rlm-rs is a
single-threaded CLI application. Implementations are not guaranteed
to be thread-safe.
Required Methods§
Sourcefn init(&mut self) -> Result<()>
fn init(&mut self) -> Result<()>
Initializes storage (creates schema, runs migrations).
Should be idempotent - safe to call multiple times.
§Errors
Returns an error if schema creation or migration fails.
Sourcefn is_initialized(&self) -> Result<bool>
fn is_initialized(&self) -> Result<bool>
Sourcefn reset(&mut self) -> Result<()>
fn reset(&mut self) -> Result<()>
Resets all stored state.
Deletes all data but preserves the schema.
§Errors
Returns an error if deletion fails.
Sourcefn save_context(&mut self, context: &Context) -> Result<()>
fn save_context(&mut self, context: &Context) -> Result<()>
Saves the current context state.
Creates or updates the context in storage.
§Errors
Returns an error if serialization or database write fails.
Sourcefn load_context(&self) -> Result<Option<Context>>
fn load_context(&self) -> Result<Option<Context>>
Loads the context state.
Returns None if no context exists.
§Errors
Returns an error if database read or deserialization fails.
Sourcefn delete_context(&mut self) -> Result<()>
fn delete_context(&mut self) -> Result<()>
Sourcefn add_buffer(&mut self, buffer: &Buffer) -> Result<i64>
fn add_buffer(&mut self, buffer: &Buffer) -> Result<i64>
Adds a buffer to storage.
Returns the assigned buffer ID.
§Errors
Returns an error if the buffer cannot be inserted.
Sourcefn list_buffers(&self) -> Result<Vec<Buffer>>
fn list_buffers(&self) -> Result<Vec<Buffer>>
Sourcefn update_buffer(&mut self, buffer: &Buffer) -> Result<()>
fn update_buffer(&mut self, buffer: &Buffer) -> Result<()>
Sourcefn delete_buffer(&mut self, id: i64) -> Result<()>
fn delete_buffer(&mut self, id: i64) -> Result<()>
Sourcefn buffer_count(&self) -> Result<usize>
fn buffer_count(&self) -> Result<usize>
Sourcefn add_chunks(&mut self, buffer_id: i64, chunks: &[Chunk]) -> Result<()>
fn add_chunks(&mut self, buffer_id: i64, chunks: &[Chunk]) -> Result<()>
Adds chunks for a buffer.
Should be called after buffer is created.
§Errors
Returns an error if chunk insertion fails.
Sourcefn delete_chunks(&mut self, buffer_id: i64) -> Result<()>
fn delete_chunks(&mut self, buffer_id: i64) -> Result<()>
Sourcefn chunk_count(&self, buffer_id: i64) -> Result<usize>
fn chunk_count(&self, buffer_id: i64) -> Result<usize>
Sourcefn export_buffers(&self) -> Result<String>
fn export_buffers(&self) -> Result<String>
Exports all buffers as a concatenated string.
Used for the export-buffers command.
§Errors
Returns an error if buffer retrieval fails.