use async_trait::async_trait;
use crate::error::StorageError;
#[async_trait]
pub trait StorageBackend: Send + Sync {
async fn get(&self, key: &str) -> Result<Option<Vec<u8>>, StorageError>;
async fn put(&self, key: &str, value: &[u8]) -> Result<(), StorageError>;
async fn delete(&self, key: &str) -> Result<(), StorageError>;
async fn list(&self, prefix: &str) -> Result<Vec<String>, StorageError>;
async fn exists(&self, key: &str) -> Result<bool, StorageError> {
Ok(self.get(key).await?.is_some())
}
}