#[cfg(feature = "drive")]
pub mod drive;
#[cfg(feature = "test-util")]
pub mod faulty;
mod folder;
use async_trait::async_trait;
use crate::error::Result;
pub use folder::FolderRemote;
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct RemoteEntry {
pub key: String,
pub size: u64,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum PutOutcome {
Created,
AlreadyExists {
same_content: bool,
},
}
#[derive(Clone, Debug, Default, PartialEq, Eq)]
pub struct ChangeBatch {
pub changed: Vec<RemoteEntry>,
pub removed: Vec<String>,
pub cursor: String,
}
#[async_trait]
pub trait RemoteStore: Send + Sync + 'static {
async fn list(&self, prefix: &str) -> Result<Vec<RemoteEntry>>;
async fn get(&self, key: &str) -> Result<Option<Vec<u8>>>;
async fn reserve(&self, key: &str) -> Result<Option<String>> {
let _ = key;
Ok(None)
}
async fn put_new(
&self,
key: &str,
data: &[u8],
reservation: Option<&str>,
) -> Result<PutOutcome>;
async fn delete(&self, key: &str) -> Result<()>;
async fn changes_since(&self, cursor: Option<&str>) -> Result<Option<ChangeBatch>> {
let _ = cursor;
Ok(None)
}
}