use std::fmt::{self, Debug, Formatter};
use std::pin::Pin;
use std::task::{Context, Poll};
use futures::future::BoxFuture;
use super::AbortRequestBuilder;
use crate::client::{UploadClient, UploadId};
use crate::error::Result;
use crate::uri::ObjectUri;
pub struct SendAbortUpload(pub(crate) BoxFuture<'static, Result<()>>);
impl SendAbortUpload {
pub fn new(client: &UploadClient, req: AbortRequest) -> Self {
let cli = client.clone();
Self(Box::pin(async move { cli.inner.send_abort_upload(req).await }))
}
}
impl Future for SendAbortUpload {
type Output = Result<()>;
fn poll(
mut self: Pin<&mut Self>,
cx: &mut Context<'_>,
) -> Poll<Self::Output> {
self.0.as_mut().poll(cx)
}
}
impl Debug for SendAbortUpload {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
f.debug_tuple("SendAbortUpload").finish()
}
}
#[derive(Debug, Clone)]
pub struct AbortRequest {
pub(crate) id: UploadId,
pub(crate) uri: ObjectUri,
}
impl AbortRequest {
pub fn new(id: UploadId, uri: ObjectUri) -> Self {
Self { id, uri }
}
pub fn with_builder(
&self,
builder: AbortRequestBuilder,
) -> AbortRequestBuilder {
builder
.bucket(&*self.uri.bucket)
.key(&*self.uri.key)
.upload_id(&*self.id)
}
}