async_openai/types/videos/
video.rs1use derive_builder::Builder;
2use serde::{Deserialize, Serialize};
3
4use crate::error::OpenAIError;
5use crate::types::videos::ImageInput;
6use crate::types::InputSource;
7
8#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
9pub enum VideoSize {
10 #[default]
11 #[serde(rename = "720x1280")]
12 S720x1280,
13 #[serde(rename = "1280x720")]
14 S1280x720,
15 #[serde(rename = "1024x1792")]
16 S1024x1792,
17 #[serde(rename = "1792x1024")]
18 S1792x1024,
19}
20
21#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
22pub enum VideoSeconds {
23 #[default]
24 #[serde(rename = "4")]
25 Four,
26 #[serde(rename = "8")]
27 Eight,
28 #[serde(rename = "12")]
29 Twelve,
30 #[serde(rename = "16")]
31 Sixteen,
32 #[serde(rename = "20")]
33 Twenty,
34 #[serde(untagged)]
35 Other(String),
36}
37
38#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
40pub struct VideoReferenceInputParam {
41 pub id: String,
43}
44
45#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
47pub struct ImageRefParam {
48 #[serde(skip_serializing_if = "Option::is_none")]
50 pub image_url: Option<String>,
51 #[serde(skip_serializing_if = "Option::is_none")]
53 pub file_id: Option<String>,
54}
55
56#[derive(Clone, Default, Debug, Builder, PartialEq)]
58#[builder(name = "CreateVideoRequestArgs")]
59#[builder(pattern = "mutable")]
60#[builder(setter(into, strip_option), default)]
61#[builder(derive(Debug))]
62#[builder(build_fn(error = "OpenAIError"))]
63pub struct CreateVideoRequest {
64 pub model: String,
66
67 pub prompt: String,
69 pub size: Option<VideoSize>,
72 pub seconds: Option<VideoSeconds>,
74 pub input_reference: Option<ImageInput>,
76 pub character_ids: Option<Vec<String>>,
78}
79
80#[derive(Clone, Default, Debug, Builder, PartialEq)]
82#[builder(name = "CreateVideoCharacterRequestArgs")]
83#[builder(pattern = "mutable")]
84#[builder(setter(into, strip_option), default)]
85#[builder(derive(Debug))]
86#[builder(build_fn(error = "OpenAIError"))]
87pub struct CreateVideoCharacterRequest {
88 pub video: InputSource,
90 pub name: String,
92}
93
94#[derive(Clone, Default, Debug, Builder, PartialEq)]
96#[builder(name = "CreateVideoEditRequestArgs")]
97#[builder(pattern = "mutable")]
98#[builder(setter(into, strip_option), default)]
99#[builder(derive(Debug))]
100#[builder(build_fn(error = "OpenAIError"))]
101pub struct CreateVideoEditRequest {
102 pub video: VideoEditInput,
104 pub prompt: String,
106}
107
108#[derive(Clone, Debug, PartialEq)]
110pub enum VideoEditInput {
111 Reference(VideoReferenceInputParam),
113 Input(InputSource),
115}
116
117impl Default for VideoEditInput {
118 fn default() -> Self {
119 Self::Reference(VideoReferenceInputParam::default())
120 }
121}
122
123#[derive(Clone, Default, Debug, Builder, PartialEq)]
125#[builder(name = "CreateVideoExtendRequestArgs")]
126#[builder(pattern = "mutable")]
127#[builder(setter(into, strip_option), default)]
128#[builder(derive(Debug))]
129#[builder(build_fn(error = "OpenAIError"))]
130pub struct CreateVideoExtendRequest {
131 pub video: VideoEditInput,
133 pub prompt: String,
135 pub seconds: Option<VideoSeconds>,
137}
138
139#[derive(Clone, Default, Debug, Builder, PartialEq, Serialize)]
140#[builder(name = "RemixVideoRequestArgs")]
141#[builder(pattern = "mutable")]
142#[builder(setter(into, strip_option), default)]
143#[builder(derive(Debug))]
144#[builder(build_fn(error = "OpenAIError"))]
145pub struct RemixVideoRequest {
146 pub prompt: String,
147}
148
149#[derive(Debug, Clone, Serialize, Deserialize)]
150pub struct VideoResourceError {
151 pub code: String,
152 pub message: String,
153}
154
155#[derive(Debug, Clone, Serialize, Deserialize)]
157pub struct VideoResource {
158 pub completed_at: Option<u64>,
160
161 pub created_at: u64,
163
164 pub error: Option<VideoResourceError>,
166
167 pub expires_at: Option<u64>,
169
170 pub id: String,
172
173 pub model: String,
175
176 pub object: String,
178
179 pub progress: u8,
181
182 pub remixed_from_video_id: Option<String>,
184
185 pub seconds: VideoSeconds,
187
188 pub size: VideoSize,
190
191 pub status: VideoStatus,
193}
194
195#[derive(Debug, Clone, Serialize, Deserialize)]
197pub struct VideoCharacterResource {
198 pub id: Option<String>,
200 pub name: Option<String>,
202 pub created_at: u64,
204}
205
206#[derive(Debug, Clone, Serialize, Deserialize)]
207#[serde(rename_all = "snake_case")]
208pub enum VideoStatus {
209 Queued,
210 InProgress,
211 Completed,
212 Failed,
213}
214
215#[derive(Debug, Clone, Serialize, Deserialize)]
216pub struct DeletedVideoResource {
217 pub id: String,
218 pub object: String,
219 pub deleted: bool,
220}
221
222#[derive(Debug, Clone, Serialize, Deserialize)]
223pub struct VideoListResource {
224 pub data: Vec<VideoResource>,
225 pub object: String,
226 pub first_id: Option<String>,
227 pub last_id: Option<String>,
228 pub has_more: bool,
229}
230
231#[derive(Debug, Clone, Serialize, Deserialize, Default)]
232#[serde(rename_all = "lowercase")]
233pub enum VideoVariant {
234 #[default]
235 Video,
236 Thumbnail,
237 Spritesheet,
238}