58 lines
3.1 KiB
Rust
58 lines
3.1 KiB
Rust
// src/storage_trait.rs
|
|
use crate::error::DBError;
|
|
use std::sync::Arc;
|
|
|
|
pub trait StorageBackend: Send + Sync {
|
|
// Basic key operations
|
|
fn get(&self, key: &str) -> Result<Option<String>, DBError>;
|
|
fn set(&self, key: String, value: String) -> Result<(), DBError>;
|
|
fn setx(&self, key: String, value: String, expire_ms: u128) -> Result<(), DBError>;
|
|
fn del(&self, key: String) -> Result<(), DBError>;
|
|
fn exists(&self, key: &str) -> Result<bool, DBError>;
|
|
fn keys(&self, pattern: &str) -> Result<Vec<String>, DBError>;
|
|
fn dbsize(&self) -> Result<i64, DBError>;
|
|
fn flushdb(&self) -> Result<(), DBError>;
|
|
fn get_key_type(&self, key: &str) -> Result<Option<String>, DBError>;
|
|
|
|
// Scanning
|
|
fn scan(&self, cursor: u64, pattern: Option<&str>, count: Option<u64>) -> Result<(u64, Vec<(String, String)>), DBError>;
|
|
fn hscan(&self, key: &str, cursor: u64, pattern: Option<&str>, count: Option<u64>) -> Result<(u64, Vec<(String, String)>), DBError>;
|
|
|
|
// Hash operations
|
|
fn hset(&self, key: &str, pairs: Vec<(String, String)>) -> Result<i64, DBError>;
|
|
fn hget(&self, key: &str, field: &str) -> Result<Option<String>, DBError>;
|
|
fn hgetall(&self, key: &str) -> Result<Vec<(String, String)>, DBError>;
|
|
fn hdel(&self, key: &str, fields: Vec<String>) -> Result<i64, DBError>;
|
|
fn hexists(&self, key: &str, field: &str) -> Result<bool, DBError>;
|
|
fn hkeys(&self, key: &str) -> Result<Vec<String>, DBError>;
|
|
fn hvals(&self, key: &str) -> Result<Vec<String>, DBError>;
|
|
fn hlen(&self, key: &str) -> Result<i64, DBError>;
|
|
fn hmget(&self, key: &str, fields: Vec<String>) -> Result<Vec<Option<String>>, DBError>;
|
|
fn hsetnx(&self, key: &str, field: &str, value: &str) -> Result<bool, DBError>;
|
|
|
|
// List operations
|
|
fn lpush(&self, key: &str, elements: Vec<String>) -> Result<i64, DBError>;
|
|
fn rpush(&self, key: &str, elements: Vec<String>) -> Result<i64, DBError>;
|
|
fn lpop(&self, key: &str, count: u64) -> Result<Vec<String>, DBError>;
|
|
fn rpop(&self, key: &str, count: u64) -> Result<Vec<String>, DBError>;
|
|
fn llen(&self, key: &str) -> Result<i64, DBError>;
|
|
fn lindex(&self, key: &str, index: i64) -> Result<Option<String>, DBError>;
|
|
fn lrange(&self, key: &str, start: i64, stop: i64) -> Result<Vec<String>, DBError>;
|
|
fn ltrim(&self, key: &str, start: i64, stop: i64) -> Result<(), DBError>;
|
|
fn lrem(&self, key: &str, count: i64, element: &str) -> Result<i64, DBError>;
|
|
|
|
// Expiration
|
|
fn ttl(&self, key: &str) -> Result<i64, DBError>;
|
|
fn expire_seconds(&self, key: &str, secs: u64) -> Result<bool, DBError>;
|
|
fn pexpire_millis(&self, key: &str, ms: u128) -> Result<bool, DBError>;
|
|
fn persist(&self, key: &str) -> Result<bool, DBError>;
|
|
fn expire_at_seconds(&self, key: &str, ts_secs: i64) -> Result<bool, DBError>;
|
|
fn pexpire_at_millis(&self, key: &str, ts_ms: i64) -> Result<bool, DBError>;
|
|
|
|
// Metadata
|
|
fn is_encrypted(&self) -> bool;
|
|
fn info(&self) -> Result<Vec<(String, String)>, DBError>;
|
|
|
|
// Clone to Arc for sharing
|
|
fn clone_arc(&self) -> Arc<dyn StorageBackend>;
|
|
} |