use std::path::Path;
use async_trait::async_trait;
use bytes::Bytes;
#[cfg(feature = "storage_aws_s3")]
pub mod aws;
#[cfg(feature = "storage_azure")]
pub mod azure;
#[cfg(feature = "storage_gcp")]
pub mod gcp;
pub mod local;
pub mod mem;
pub mod object_store_adapter;
use super::StorageResult;
pub struct UploadResponse {
pub e_tag: Option<String>,
pub version: Option<String>,
}
pub type GetResponse = object_store::GetResult;
#[async_trait]
pub trait StoreDriver: Sync + Send {
async fn upload(&self, path: &Path, content: &Bytes) -> StorageResult<UploadResponse>;
async fn get(&self, path: &Path) -> StorageResult<GetResponse>;
async fn delete(&self, path: &Path) -> StorageResult<()>;
async fn rename(&self, from: &Path, to: &Path) -> StorageResult<()>;
async fn copy(&self, from: &Path, to: &Path) -> StorageResult<()>;
async fn exists(&self, path: &Path) -> StorageResult<bool>;
}