1use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
8#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
9#[non_exhaustive]
10pub enum VideoStatus {
11 #[serde(rename = "queued")]
12 Queued,
13 #[serde(rename = "in_progress")]
14 InProgress,
15 #[serde(rename = "completed")]
16 Completed,
17 #[serde(rename = "failed")]
18 Failed,
19}
20
21#[derive(Debug, Clone, Serialize, Deserialize)]
23#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
24pub struct Video {
25 pub id: String,
27 #[serde(skip_serializing_if = "Option::is_none", default)]
29 pub completed_at: Option<i64>,
30 pub created_at: i64,
32 #[serde(skip_serializing_if = "Option::is_none", default)]
34 pub error: Option<VideoCreateError>,
35 #[serde(skip_serializing_if = "Option::is_none", default)]
37 pub expires_at: Option<i64>,
38 pub model: VideoModel,
40 pub object: String,
42 pub progress: i64,
44 #[serde(skip_serializing_if = "Option::is_none", default)]
46 pub prompt: Option<String>,
47 #[serde(skip_serializing_if = "Option::is_none", default)]
49 pub remixed_from_video_id: Option<String>,
50 pub seconds: String,
52 pub size: VideoSize,
54 pub status: VideoStatus,
56}
57
58#[derive(Debug, Clone, Serialize, Deserialize)]
59#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
60pub struct VideoCreateCharacterParams {
61 pub name: String,
63 pub video: serde_json::Value,
65}
66
67#[derive(Debug, Clone, Serialize, Deserialize)]
68#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
69pub struct VideoCreateCharacterResponse {
70 #[serde(skip_serializing_if = "Option::is_none", default)]
72 pub id: Option<String>,
73 pub created_at: i64,
75 #[serde(skip_serializing_if = "Option::is_none", default)]
77 pub name: Option<String>,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize)]
82#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
83pub struct VideoCreateError {
84 pub code: String,
86 pub message: String,
88}
89
90#[derive(Debug, Clone, Serialize, Deserialize)]
91#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
92pub struct VideoCreateParams {
93 pub prompt: String,
95 #[serde(skip_serializing_if = "Option::is_none", default)]
97 pub input_reference: Option<InputReference>,
98 #[serde(skip_serializing_if = "Option::is_none", default)]
100 pub model: Option<serde_json::Value>,
101 #[serde(skip_serializing_if = "Option::is_none", default)]
103 pub seconds: Option<VideoSeconds>,
104 #[serde(skip_serializing_if = "Option::is_none", default)]
106 pub size: Option<VideoSize>,
107}
108
109pub type InputReference = serde_json::Value;
110
111#[derive(Debug, Clone, Serialize, Deserialize)]
113#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
114pub struct VideoDeleteResponse {
115 pub id: String,
117 pub deleted: bool,
119 pub object: String,
121}
122
123#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
124#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
125#[non_exhaustive]
126pub enum VideoDownloadContentParamsVariant {
127 #[serde(rename = "video")]
128 Video,
129 #[serde(rename = "thumbnail")]
130 Thumbnail,
131 #[serde(rename = "spritesheet")]
132 Spritesheet,
133}
134
135#[derive(Debug, Clone, Serialize, Deserialize)]
136#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
137pub struct VideoDownloadContentParams {
138 #[serde(skip_serializing_if = "Option::is_none", default)]
140 pub variant: Option<VideoDownloadContentParamsVariant>,
141}
142
143#[derive(Debug, Clone, Serialize, Deserialize)]
144#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
145pub struct VideoEditParams {
146 pub prompt: String,
148 pub video: Video,
150}
151
152#[derive(Debug, Clone, Serialize, Deserialize)]
154#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
155pub struct VideoVideoReferenceInputParam {
156 pub id: String,
158}
159
160#[derive(Debug, Clone, Serialize, Deserialize)]
161#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
162pub struct VideoExtendParams {
163 pub prompt: String,
165 pub seconds: VideoSeconds,
167 pub video: Video,
169}
170
171#[derive(Debug, Clone, Serialize, Deserialize)]
172#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
173pub struct VideoGetCharacterResponse {
174 #[serde(skip_serializing_if = "Option::is_none", default)]
176 pub id: Option<String>,
177 pub created_at: i64,
179 #[serde(skip_serializing_if = "Option::is_none", default)]
181 pub name: Option<String>,
182}
183
184#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
185#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
186#[non_exhaustive]
187pub enum VideoListParamsOrder {
188 #[serde(rename = "asc")]
189 Asc,
190 #[serde(rename = "desc")]
191 Desc,
192}
193
194#[derive(Debug, Clone, Serialize, Deserialize)]
195#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
196pub struct VideoListParams {
197 #[serde(skip_serializing_if = "Option::is_none", default)]
199 pub after: Option<String>,
200 #[serde(skip_serializing_if = "Option::is_none", default)]
202 pub limit: Option<i64>,
203 #[serde(skip_serializing_if = "Option::is_none", default)]
205 pub order: Option<VideoListParamsOrder>,
206}
207
208#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
209#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
210#[non_exhaustive]
211pub enum VideoModel {
212 #[serde(rename = "sora-2")]
213 Sora2,
214 #[serde(rename = "sora-2-pro")]
215 Sora2Pro,
216 #[serde(rename = "sora-2-2025-10-06")]
217 Sora220251006,
218 #[serde(rename = "sora-2-pro-2025-10-06")]
219 Sora2Pro20251006,
220 #[serde(rename = "sora-2-2025-12-08")]
221 Sora220251208,
222}
223
224#[derive(Debug, Clone, Serialize, Deserialize)]
225#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
226pub struct VideoRemixParams {
227 pub prompt: String,
229}
230
231#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
232#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
233#[non_exhaustive]
234pub enum VideoSeconds {
235 #[serde(rename = "4")]
236 V4,
237 #[serde(rename = "8")]
238 V8,
239 #[serde(rename = "12")]
240 V12,
241}
242
243#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
244#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
245#[non_exhaustive]
246pub enum VideoSize {
247 #[serde(rename = "720x1280")]
248 V720x1280,
249 #[serde(rename = "1280x720")]
250 V1280x720,
251 #[serde(rename = "1024x1792")]
252 V1024x1792,
253 #[serde(rename = "1792x1024")]
254 V1792x1024,
255}