1use derive_builder::Builder;
2use serde::{Deserialize, Serialize};
3
4use crate::error::OpenAIError;
5
6use super::InputSource;
7
8#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
9pub struct ContainerResource {
10 pub id: String,
12 pub object: String,
14 pub name: String,
16 pub created_at: u32,
18 pub status: String,
20 #[serde(skip_serializing_if = "Option::is_none")]
23 pub expires_after: Option<ContainerExpiresAfter>,
24 #[serde(skip_serializing_if = "Option::is_none")]
26 pub last_active_at: Option<u32>,
27}
28
29#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
31pub struct ContainerExpiresAfter {
32 pub anchor: ContainerExpiresAfterAnchor,
34 pub minutes: u32,
35}
36
37#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
39#[serde(rename_all = "snake_case")]
40pub enum ContainerExpiresAfterAnchor {
41 LastActiveAt,
42}
43
44#[derive(Debug, Default, Clone, Builder, PartialEq, Serialize)]
47#[builder(name = "CreateContainerRequestArgs")]
48#[builder(pattern = "mutable")]
49#[builder(setter(into, strip_option), default)]
50#[builder(derive(Debug))]
51#[builder(build_fn(error = "OpenAIError"))]
52pub struct CreateContainerRequest {
53 pub name: String,
55 #[serde(skip_serializing_if = "Option::is_none")]
57 pub file_ids: Option<Vec<String>>,
58 #[serde(skip_serializing_if = "Option::is_none")]
60 pub expires_after: Option<ContainerExpiresAfter>,
61}
62
63#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
65pub struct ContainerListResource {
66 pub object: String,
68 pub data: Vec<ContainerResource>,
70 pub first_id: Option<String>,
72 pub last_id: Option<String>,
74 pub has_more: bool,
76}
77
78#[derive(Debug, Deserialize, Clone, PartialEq, Serialize)]
80pub struct DeleteContainerResponse {
81 pub id: String,
82 pub object: String,
83 pub deleted: bool,
84}
85
86#[derive(Debug, Serialize, Default, Clone, Builder, PartialEq)]
88#[builder(name = "ListContainersQueryArgs")]
89#[builder(pattern = "mutable")]
90#[builder(setter(into, strip_option), default)]
91#[builder(derive(Debug))]
92#[builder(build_fn(error = "OpenAIError"))]
93pub struct ListContainersQuery {
94 #[serde(skip_serializing_if = "Option::is_none")]
96 pub limit: Option<u32>,
97 #[serde(skip_serializing_if = "Option::is_none")]
99 pub order: Option<String>,
100 #[serde(skip_serializing_if = "Option::is_none")]
102 pub after: Option<String>,
103}
104
105#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
109pub struct ContainerFileResource {
110 pub id: String,
112 pub object: String,
114 pub container_id: String,
116 pub created_at: u32,
118 pub bytes: u32,
120 pub path: String,
122 pub source: String,
124}
125
126#[derive(Debug, Default, Clone, PartialEq)]
129pub struct CreateContainerFileRequest {
130 pub file: Option<InputSource>,
132 pub file_id: Option<String>,
134}
135
136#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
138pub struct ContainerFileListResource {
139 pub object: String,
141 pub data: Vec<ContainerFileResource>,
143 pub first_id: Option<String>,
145 pub last_id: Option<String>,
147 pub has_more: bool,
149}
150
151#[derive(Debug, Deserialize, Clone, PartialEq, Serialize)]
153pub struct DeleteContainerFileResponse {
154 pub id: String,
155 pub object: String,
156 pub deleted: bool,
157}
158
159#[derive(Debug, Serialize, Default, Clone, Builder, PartialEq)]
161#[builder(name = "ListContainerFilesQueryArgs")]
162#[builder(pattern = "mutable")]
163#[builder(setter(into, strip_option), default)]
164#[builder(derive(Debug))]
165#[builder(build_fn(error = "OpenAIError"))]
166pub struct ListContainerFilesQuery {
167 #[serde(skip_serializing_if = "Option::is_none")]
169 pub limit: Option<u32>,
170 #[serde(skip_serializing_if = "Option::is_none")]
172 pub order: Option<String>,
173 #[serde(skip_serializing_if = "Option::is_none")]
175 pub after: Option<String>,
176}