use derive_builder::Builder;
use serde::{Deserialize, Serialize};
use crate::error::OpenAIError;
use crate::types::videos::ImageInput;
#[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, 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<String>,
pub input_reference: Option<ImageInput>,
}
#[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 VideoJobError {
pub code: String,
pub message: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VideoJob {
pub completed_at: Option<u64>,
pub created_at: u64,
pub error: Option<VideoJobError>,
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: String,
pub size: String,
pub status: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VideoJobMetadata {
pub id: String,
pub object: String,
pub deleted: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListVideosResponse {
pub data: Vec<VideoJob>,
pub object: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "lowercase")]
pub enum VideoVariant {
#[default]
Video,
Thumbnail,
Spritesheet,
}