use derive_builder::Builder;
use serde::{Deserialize, Serialize};
use crate::error::OpenAIError;
use crate::types::videos::ImageInput;
use crate::types::InputSource;
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub enum VideoSize {
#[default]
#[serde(rename = "720x1280")]
S720x1280,
#[serde(rename = "1280x720")]
S1280x720,
#[serde(rename = "1024x1792")]
S1024x1792,
#[serde(rename = "1792x1024")]
S1792x1024,
}
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub enum VideoSeconds {
#[default]
#[serde(rename = "4")]
Four,
#[serde(rename = "8")]
Eight,
#[serde(rename = "12")]
Twelve,
#[serde(rename = "16")]
Sixteen,
#[serde(rename = "20")]
Twenty,
#[serde(untagged)]
Other(String),
}
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct VideoReferenceInputParam {
pub id: String,
}
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct ImageRefParam {
#[serde(skip_serializing_if = "Option::is_none")]
pub image_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_id: Option<String>,
}
#[derive(Clone, Default, Debug, Builder, PartialEq)]
#[builder(name = "CreateVideoRequestArgs")]
#[builder(pattern = "mutable")]
#[builder(setter(into, strip_option), default)]
#[builder(derive(Debug))]
#[builder(build_fn(error = "OpenAIError"))]
pub struct CreateVideoRequest {
pub model: String,
pub prompt: String,
pub size: Option<VideoSize>,
pub seconds: Option<VideoSeconds>,
pub input_reference: Option<ImageInput>,
pub character_ids: Option<Vec<String>>,
}
#[derive(Clone, Default, Debug, Builder, PartialEq)]
#[builder(name = "CreateVideoCharacterRequestArgs")]
#[builder(pattern = "mutable")]
#[builder(setter(into, strip_option), default)]
#[builder(derive(Debug))]
#[builder(build_fn(error = "OpenAIError"))]
pub struct CreateVideoCharacterRequest {
pub video: InputSource,
pub name: String,
}
#[derive(Clone, Default, Debug, Builder, PartialEq)]
#[builder(name = "CreateVideoEditRequestArgs")]
#[builder(pattern = "mutable")]
#[builder(setter(into, strip_option), default)]
#[builder(derive(Debug))]
#[builder(build_fn(error = "OpenAIError"))]
pub struct CreateVideoEditRequest {
pub video: VideoEditInput,
pub prompt: String,
}
#[derive(Clone, Debug, PartialEq)]
pub enum VideoEditInput {
Reference(VideoReferenceInputParam),
Input(InputSource),
}
impl Default for VideoEditInput {
fn default() -> Self {
Self::Reference(VideoReferenceInputParam::default())
}
}
#[derive(Clone, Default, Debug, Builder, PartialEq)]
#[builder(name = "CreateVideoExtendRequestArgs")]
#[builder(pattern = "mutable")]
#[builder(setter(into, strip_option), default)]
#[builder(derive(Debug))]
#[builder(build_fn(error = "OpenAIError"))]
pub struct CreateVideoExtendRequest {
pub video: VideoEditInput,
pub prompt: String,
pub seconds: Option<VideoSeconds>,
}
#[derive(Clone, Default, Debug, Builder, PartialEq, Serialize)]
#[builder(name = "RemixVideoRequestArgs")]
#[builder(pattern = "mutable")]
#[builder(setter(into, strip_option), default)]
#[builder(derive(Debug))]
#[builder(build_fn(error = "OpenAIError"))]
pub struct RemixVideoRequest {
pub prompt: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VideoResourceError {
pub code: String,
pub message: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VideoResource {
pub completed_at: Option<u64>,
pub created_at: u64,
pub error: Option<VideoResourceError>,
pub expires_at: Option<u64>,
pub id: String,
pub model: String,
pub object: String,
pub progress: u8,
pub remixed_from_video_id: Option<String>,
pub seconds: VideoSeconds,
pub size: VideoSize,
pub status: VideoStatus,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VideoCharacterResource {
pub id: Option<String>,
pub name: Option<String>,
pub created_at: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum VideoStatus {
Queued,
InProgress,
Completed,
Failed,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeletedVideoResource {
pub id: String,
pub object: String,
pub deleted: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VideoListResource {
pub data: Vec<VideoResource>,
pub object: String,
pub first_id: Option<String>,
pub last_id: Option<String>,
pub has_more: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "lowercase")]
pub enum VideoVariant {
#[default]
Video,
Thumbnail,
Spritesheet,
}