use std::time::Duration;
use rskit_errors::AppResult;
use crate::FileSource;
use super::{StoredFile, UploadOptions};
#[async_trait::async_trait]
pub trait FileStore: Send + Sync {
async fn upload(
&self,
source: &FileSource,
key: &str,
options: UploadOptions,
) -> AppResult<StoredFile>;
async fn download(&self, key: &str) -> AppResult<FileSource>;
async fn delete(&self, key: &str) -> AppResult<()>;
async fn exists(&self, key: &str) -> AppResult<bool>;
async fn head(&self, key: &str) -> AppResult<StoredFile>;
async fn list(&self, prefix: &str, limit: Option<usize>) -> AppResult<Vec<StoredFile>>;
async fn presigned_url(&self, key: &str, expires_in: Duration) -> AppResult<String>;
async fn copy(&self, from_key: &str, to_key: &str) -> AppResult<StoredFile>;
async fn rename(&self, from_key: &str, to_key: &str) -> AppResult<StoredFile>;
}