Skip to main content

openai_dive/v1/resources/
file.rs

1use crate::v1::resources::shared::FileUpload;
2use derive_builder::Builder;
3use serde::{Deserialize, Serialize};
4use std::fmt::Display;
5
6#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
7pub struct File {
8    /// The file identifier, which can be referenced in the API endpoints.
9    pub id: String,
10    /// The size of the file, in bytes.
11    pub bytes: u32,
12    /// The Unix timestamp (in seconds) for when the file was created.
13    pub created_at: u32,
14    /// The name of the file.
15    pub filename: String,
16    /// The object type, which is always "file".
17    pub object: String,
18    /// The intended purpose of the file.
19    pub purpose: FilePurpose,
20}
21
22#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
23pub struct ListFilesParameters {
24    /// Only return files with the given purpose.
25    pub purpose: Option<FilePurpose>,
26}
27
28#[derive(Serialize, Deserialize, Debug, Default, Builder, Clone, PartialEq)]
29#[builder(name = "UploadFileParametersBuilder")]
30#[builder(setter(into, strip_option), default)]
31pub struct UploadFileParameters {
32    /// The File object to be uploaded.
33    pub file: FileUpload,
34    /// The intended purpose of the uploaded file.
35    pub purpose: FilePurpose,
36}
37
38#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
39#[serde(rename_all = "snake_case")]
40pub enum FilePurpose {
41    Assistants,
42    AssistantsOutput,
43    Batch,
44    BatchOutput,
45    #[serde(rename = "fine-tune")]
46    FineTune,
47    #[serde(rename = "fine-tune-results")]
48    FineTuneResults,
49    Vision,
50    #[default]
51    UserData,
52    Evals,
53}
54
55impl Display for FilePurpose {
56    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
57        write!(
58            f,
59            "{}",
60            match self {
61                FilePurpose::Assistants => "assistants",
62                FilePurpose::AssistantsOutput => "assistants_output",
63                FilePurpose::Batch => "batch",
64                FilePurpose::BatchOutput => "batch_output",
65                FilePurpose::FineTune => "fine-tune",
66                FilePurpose::FineTuneResults => "fine-tune-results",
67                FilePurpose::Vision => "vision",
68                FilePurpose::UserData => "user_data",
69                FilePurpose::Evals => "evals",
70            }
71        )
72    }
73}