use crate::v1::resources::shared::FileUpload;
use derive_builder::Builder;
use serde::{Deserialize, Serialize};
use std::fmt::Display;
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct File {
pub id: String,
pub bytes: u32,
pub created_at: u32,
pub filename: String,
pub object: String,
pub purpose: FilePurpose,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct ListFilesParameters {
pub purpose: Option<FilePurpose>,
}
#[derive(Serialize, Deserialize, Debug, Default, Builder, Clone, PartialEq)]
#[builder(name = "UploadFileParametersBuilder")]
#[builder(setter(into, strip_option), default)]
pub struct UploadFileParameters {
pub file: FileUpload,
pub purpose: FilePurpose,
}
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum FilePurpose {
Assistants,
AssistantsOutput,
Batch,
BatchOutput,
#[serde(rename = "fine-tune")]
FineTune,
#[serde(rename = "fine-tune-results")]
FineTuneResults,
Vision,
#[default]
UserData,
Evals,
}
impl Display for FilePurpose {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"{}",
match self {
FilePurpose::Assistants => "assistants",
FilePurpose::AssistantsOutput => "assistants_output",
FilePurpose::Batch => "batch",
FilePurpose::BatchOutput => "batch_output",
FilePurpose::FineTune => "fine-tune",
FilePurpose::FineTuneResults => "fine-tune-results",
FilePurpose::Vision => "vision",
FilePurpose::UserData => "user_data",
FilePurpose::Evals => "evals",
}
)
}
}