use std::collections::BTreeMap;
use http::Method;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use crate::generated::endpoints;
use super::{
JsonRequestBuilder, UploadObject, UploadPartsResource, UploadsResource, encode_path_segment,
};
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct UploadPart {
pub id: String,
pub created_at: Option<u64>,
#[serde(default)]
pub object: String,
pub upload_id: Option<String>,
#[serde(flatten)]
pub extra: BTreeMap<String, Value>,
}
impl UploadsResource {
pub fn create(&self) -> JsonRequestBuilder<UploadObject> {
JsonRequestBuilder::new(
self.client.clone(),
"uploads.create",
Method::POST,
"/uploads",
)
}
pub fn cancel(&self, upload_id: impl Into<String>) -> JsonRequestBuilder<UploadObject> {
JsonRequestBuilder::new(
self.client.clone(),
"uploads.cancel",
Method::POST,
format!("/uploads/{}/cancel", encode_path_segment(upload_id.into())),
)
}
pub fn complete(&self, upload_id: impl Into<String>) -> JsonRequestBuilder<UploadObject> {
JsonRequestBuilder::new(
self.client.clone(),
"uploads.complete",
Method::POST,
format!(
"/uploads/{}/complete",
encode_path_segment(upload_id.into())
),
)
}
pub fn parts(&self) -> UploadPartsResource {
UploadPartsResource::new(self.client.clone())
}
}
impl UploadPartsResource {
pub fn create(&self, upload_id: impl Into<String>) -> JsonRequestBuilder<UploadPart> {
let endpoint = endpoints::uploads::UPLOADS_PARTS_CREATE;
JsonRequestBuilder::new(
self.client.clone(),
endpoint.id,
Method::POST,
endpoint.render(&[("upload_id", &encode_path_segment(upload_id.into()))]),
)
}
}