use crate::error::Result;
use crate::progress::Progress;
use std::path::PathBuf;
use std::time::Duration;
pub struct ShareRequest {
pub path: PathBuf,
pub expires: Duration,
pub encrypt: bool,
pub downloads: Option<u32>,
pub pin: Option<String>,
pub from: Option<String>,
pub message: Option<String>,
}
pub struct Share {
pub id: String,
pub link: String,
pub size: u64,
pub expires_at: u64,
}
pub struct GetRequest {
pub url: String,
pub out: Option<PathBuf>,
pub pin: Option<String>,
}
pub struct Fetched {
pub path: PathBuf,
pub from: Option<String>,
pub message: Option<String>,
}
pub struct ShareInfo {
pub id: String,
pub filename: Option<String>,
pub expires_at: u64,
}
pub struct BackendStatus {
pub summary: Vec<(String, String)>,
}
pub trait Transfer {
fn share(&self, req: ShareRequest, progress: &dyn Progress) -> Result<Share>;
fn get(&self, req: GetRequest, progress: &dyn Progress) -> Result<Fetched>;
fn list(&self) -> Result<Vec<ShareInfo>>;
fn revoke(&self, id: &str) -> Result<()>;
fn status(&self) -> Result<BackendStatus>;
}