use super::entities::FileId;
use super::errors::DomainResult;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AssignResult {
pub file_id: FileId,
pub url: String,
pub public_url: Option<String>,
pub count: u32,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct VolumeLocation {
pub url: String,
pub public_url: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct LookupResult {
pub volume_id: u32,
pub locations: Vec<VolumeLocation>,
}
#[derive(Debug, Clone, Default)]
pub struct AssignOptions {
pub replication: Option<String>,
pub data_center: Option<String>,
pub rack: Option<String>,
pub ttl: Option<String>,
pub collection: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct UploadResult {
pub file_id: FileId,
pub size: u64,
pub etag: Option<String>,
}
pub trait MasterPort: Send + Sync {
fn assign(
&self,
options: Option<AssignOptions>,
) -> impl std::future::Future<Output = DomainResult<AssignResult>> + Send;
fn lookup(
&self,
volume_id: u32,
) -> impl std::future::Future<Output = DomainResult<LookupResult>> + Send;
}
pub trait VolumePort: Send + Sync {
fn upload(
&self,
url: &str,
file_id: &FileId,
data: Vec<u8>,
filename: Option<&str>,
content_type: Option<&str>,
) -> impl std::future::Future<Output = DomainResult<UploadResult>> + Send;
fn download(
&self,
url: &str,
file_id: &FileId,
) -> impl std::future::Future<Output = DomainResult<Vec<u8>>> + Send;
fn delete(
&self,
url: &str,
file_id: &FileId,
) -> impl std::future::Future<Output = DomainResult<()>> + Send;
}