use async_trait::async_trait;
use crate::chunk_outcome::ChunkOutcome;
use crate::error::MeowError;
use crate::prepare_outcome::PrepareOutcome;
use crate::transfer_task::TransferTask;
#[async_trait]
pub trait TransferTrait: Send + Sync {
async fn prepare(
&self,
task: &TransferTask,
local_offset: u64,
) -> Result<PrepareOutcome, MeowError>;
async fn transfer_chunk(
&self,
task: &TransferTask,
offset: u64,
chunk_size: u64,
remote_total_size: u64,
) -> Result<ChunkOutcome, MeowError>;
async fn cancel(&self, _task: &TransferTask) -> Result<(), MeowError> {
Ok(())
}
}