use async_trait::async_trait;
use crate::http_breakpoint::UploadResumeInfo;
use crate::{MeowError, TransferTask};
#[derive(Debug, Clone, Copy)]
pub struct UploadPrepareCtx<'a> {
pub client: &'a reqwest::Client,
pub task: &'a TransferTask,
pub local_offset: u64,
}
#[derive(Debug, Clone, Copy)]
pub struct UploadChunkCtx<'a> {
pub client: &'a reqwest::Client,
pub task: &'a TransferTask,
pub chunk: &'a [u8],
pub offset: u64,
}
#[async_trait]
pub trait BreakpointUpload: Send + Sync {
async fn prepare(&self, ctx: UploadPrepareCtx<'_>) -> Result<UploadResumeInfo, MeowError>;
async fn upload_chunk(&self, ctx: UploadChunkCtx<'_>) -> Result<UploadResumeInfo, MeowError>;
async fn complete_upload(
&self,
_client: &reqwest::Client,
_task: &TransferTask,
) -> Result<(), MeowError> {
Ok(())
}
async fn abort_upload(
&self,
_client: &reqwest::Client,
_task: &TransferTask,
) -> Result<(), MeowError> {
Ok(())
}
}