use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
#[non_exhaustive]
pub enum VideoStatus {
#[serde(rename = "queued")]
Queued,
#[serde(rename = "in_progress")]
InProgress,
#[serde(rename = "completed")]
Completed,
#[serde(rename = "failed")]
Failed,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct Video {
pub id: String,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub completed_at: Option<i64>,
pub created_at: i64,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub error: Option<VideoCreateError>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub expires_at: Option<i64>,
pub model: VideoModel,
pub object: String,
pub progress: i64,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub prompt: Option<String>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub remixed_from_video_id: Option<String>,
pub seconds: String,
pub size: VideoSize,
pub status: VideoStatus,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct VideoCreateCharacterParams {
pub name: String,
pub video: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct VideoCreateCharacterResponse {
#[serde(skip_serializing_if = "Option::is_none", default)]
pub id: Option<String>,
pub created_at: i64,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct VideoCreateError {
pub code: String,
pub message: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct VideoCreateParams {
pub prompt: String,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub input_reference: Option<InputReference>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub model: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub seconds: Option<VideoSeconds>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub size: Option<VideoSize>,
}
pub type InputReference = serde_json::Value;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct VideoDeleteResponse {
pub id: String,
pub deleted: bool,
pub object: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
#[non_exhaustive]
pub enum VideoDownloadContentParamsVariant {
#[serde(rename = "video")]
Video,
#[serde(rename = "thumbnail")]
Thumbnail,
#[serde(rename = "spritesheet")]
Spritesheet,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct VideoDownloadContentParams {
#[serde(skip_serializing_if = "Option::is_none", default)]
pub variant: Option<VideoDownloadContentParamsVariant>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct VideoEditParams {
pub prompt: String,
pub video: Video,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct VideoVideoReferenceInputParam {
pub id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct VideoExtendParams {
pub prompt: String,
pub seconds: VideoSeconds,
pub video: Video,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct VideoGetCharacterResponse {
#[serde(skip_serializing_if = "Option::is_none", default)]
pub id: Option<String>,
pub created_at: i64,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub name: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
#[non_exhaustive]
pub enum VideoListParamsOrder {
#[serde(rename = "asc")]
Asc,
#[serde(rename = "desc")]
Desc,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct VideoListParams {
#[serde(skip_serializing_if = "Option::is_none", default)]
pub after: Option<String>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub limit: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub order: Option<VideoListParamsOrder>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
#[non_exhaustive]
pub enum VideoModel {
#[serde(rename = "sora-2")]
Sora2,
#[serde(rename = "sora-2-pro")]
Sora2Pro,
#[serde(rename = "sora-2-2025-10-06")]
Sora220251006,
#[serde(rename = "sora-2-pro-2025-10-06")]
Sora2Pro20251006,
#[serde(rename = "sora-2-2025-12-08")]
Sora220251208,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
pub struct VideoRemixParams {
pub prompt: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
#[non_exhaustive]
pub enum VideoSeconds {
#[serde(rename = "4")]
V4,
#[serde(rename = "8")]
V8,
#[serde(rename = "12")]
V12,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
#[non_exhaustive]
pub enum VideoSize {
#[serde(rename = "720x1280")]
V720x1280,
#[serde(rename = "1280x720")]
V1280x720,
#[serde(rename = "1024x1792")]
V1024x1792,
#[serde(rename = "1792x1024")]
V1792x1024,
}