1use crate::engine::error::VfsResult;
2use crate::engine::types::{BlockKey, ObjectEntry, ObjectMeta};
3use async_trait::async_trait;
4
5#[async_trait]
6pub trait BlockStore: Send + Sync {
7 async fn get(&self, key: &BlockKey) -> VfsResult<Vec<u8>>;
8 async fn get_range(&self, key: &BlockKey, off: u64, len: u64) -> VfsResult<Vec<u8>>;
9 async fn put(&self, key: &BlockKey, data: &[u8]) -> VfsResult<()>;
10 async fn exists(&self, key: &BlockKey) -> VfsResult<bool>;
11 async fn delete_many(&self, keys: &[BlockKey]) -> VfsResult<()>;
12 async fn copy(&self, src: &BlockKey, dst: &BlockKey) -> VfsResult<()>;
13
14 async fn sync(&self) -> VfsResult<()> {
15 Ok(())
16 }
17}
18
19#[async_trait]
20pub trait ObjectBackend: Send + Sync {
21 async fn list(&self, prefix: &str) -> VfsResult<Vec<ObjectEntry>>;
22 async fn head(&self, key: &str) -> VfsResult<Option<ObjectMeta>>;
23 async fn get_range(&self, key: &str, off: u64, len: u64) -> VfsResult<Vec<u8>>;
24 async fn put(&self, key: &str, data: &[u8], meta: ObjectMeta) -> VfsResult<()>;
25 async fn copy(&self, src: &str, dst: &str) -> VfsResult<()>;
26 async fn delete(&self, key: &str) -> VfsResult<()>;
27}