in src/upload.rs [67:96]
fn put_part(&mut self, data: PutPayload) -> UploadPart;
/// Complete the multipart upload
///
/// It is implementation defined behaviour if this method is called before polling
/// all [`UploadPart`] returned by [`MultipartUpload::put_part`] to completion. Additionally,
/// it is implementation defined behaviour to call [`MultipartUpload::complete`]
/// on an already completed or aborted [`MultipartUpload`].
async fn complete(&mut self) -> Result<PutResult>;
/// Abort the multipart upload
///
/// If a [`MultipartUpload`] is dropped without calling [`MultipartUpload::complete`],
/// some object stores will automatically clean up any previously uploaded parts.
/// However, some stores, such as S3 and GCS, cannot perform cleanup on drop.
/// As such [`MultipartUpload::abort`] can be invoked to perform this cleanup.
///
/// It will not be possible to call `abort` in all failure scenarios, for example
/// non-graceful shutdown of the calling application. It is therefore recommended
/// object stores are configured with lifecycle rules to automatically cleanup
/// unused parts older than some threshold. See [crate::aws] and [crate::gcp]
/// for more information.
///
/// It is implementation defined behaviour to call [`MultipartUpload::abort`]
/// on an already completed or aborted [`MultipartUpload`]
async fn abort(&mut self) -> Result<()>;
}
#[async_trait]
impl<W: MultipartUpload + ?Sized> MultipartUpload for Box<W> {