Skip to main content

secrets_core/
storage.rs

1use async_trait::async_trait;
2use chrono::{DateTime, Utc};
3use thiserror::Error;
4
5#[derive(Debug, Error)]
6pub enum StorageError {
7    #[error("backend error: {0}")]
8    Backend(String),
9    #[error("not found")]
10    NotFound,
11}
12
13pub type StorageResult<T> = Result<T, StorageError>;
14
15#[derive(Debug, Clone)]
16pub struct StorageEntry {
17    pub value: Vec<u8>,
18    pub expires_at: Option<DateTime<Utc>>,
19}
20
21#[async_trait]
22pub trait StorageBackend: Send + Sync {
23    async fn get(&self, path: &str) -> StorageResult<Option<StorageEntry>>;
24    async fn put(&self, path: &str, entry: StorageEntry) -> StorageResult<()>;
25    async fn delete(&self, path: &str) -> StorageResult<()>;
26    async fn list(&self, prefix: &str) -> StorageResult<Vec<String>>;
27}