use serde::{Deserialize, Serialize};
use crate::pagination::HasId;
use crate::types::files::FileObject;
pub const DEFAULT_PART_SIZE: usize = 64 * 1024 * 1024;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum UploadStatus {
Pending,
Completed,
Cancelled,
Expired,
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, Deserialize)]
#[non_exhaustive]
pub struct Upload {
pub id: String,
#[serde(default)]
pub bytes: i64,
#[serde(default)]
pub created_at: i64,
#[serde(default)]
pub expires_at: i64,
#[serde(default)]
pub filename: String,
#[serde(default)]
pub object: String,
#[serde(default)]
pub purpose: String,
pub status: UploadStatus,
#[serde(default)]
pub file: Option<FileObject>,
}
impl HasId for Upload {
fn id(&self) -> Option<&str> {
Some(&self.id)
}
}
#[derive(Debug, Clone, Deserialize)]
#[non_exhaustive]
pub struct UploadPart {
pub id: String,
#[serde(default)]
pub created_at: i64,
#[serde(default)]
pub upload_id: String,
#[serde(default)]
pub object: String,
}
impl HasId for UploadPart {
fn id(&self) -> Option<&str> {
Some(&self.id)
}
}
#[derive(Debug, Clone, Serialize)]
pub struct UploadCreateParams {
pub bytes: i64,
pub filename: String,
pub mime_type: String,
pub purpose: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub expires_after: Option<crate::types::common::ExpiresAfter>,
}
impl UploadCreateParams {
pub fn new(
filename: impl Into<String>,
bytes: i64,
mime_type: impl Into<String>,
purpose: impl Into<String>,
) -> Self {
Self {
bytes,
filename: filename.into(),
mime_type: mime_type.into(),
purpose: purpose.into(),
expires_after: None,
}
}
pub fn expires_after(mut self, expires_after: crate::types::common::ExpiresAfter) -> Self {
self.expires_after = Some(expires_after);
self
}
}