use codex_protocol::models::ImageReference; use schemars::JsonSchema; use serde::Deserialize; use serde::Serialize; #[derive(Debug, Clone, Serialize, PartialEq)] pub struct ImageGenerationRequest { pub prompt: String, #[serde(flatten)] pub output: Option, #[serde(skip_serializing_if = "Option::is_none")] pub background: Option, pub model: String, #[serde(skip_serializing_if = "Option::is_none")] pub n: Option, #[serde(skip_serializing_if = "Option::is_none")] pub quality: Option, #[serde(skip_serializing_if = "Option::is_none")] pub size: Option, } #[derive(Debug, Clone, Serialize, PartialEq)] pub struct ImageEditRequest { pub images: Vec, pub prompt: String, #[serde(flatten)] pub output: Option, #[serde(skip_serializing_if = "Option::is_none")] pub background: Option, pub model: String, #[serde(skip_serializing_if = "Option::is_none")] pub n: Option, #[serde(skip_serializing_if = "Option::is_none")] pub quality: Option, #[serde(skip_serializing_if = "Option::is_none")] pub size: Option, } /// Optional GIF controls accepted by the Images generation and edit endpoints. #[derive(Debug, Clone, Copy, Deserialize, Serialize, JsonSchema, PartialEq)] pub struct GifOptions { /// Number of frames (2–16). Defaults to 9. #[serde(skip_serializing_if = "Option::is_none")] #[schemars(range(min = 2, max = 16))] pub frame_count: Option, /// Duration of each frame in milliseconds (20–2000). Defaults to 200. #[serde(skip_serializing_if = "Option::is_none")] #[schemars(range(min = 20, max = 2000))] pub frame_duration_ms: Option, } /// The Images API expects the format and its controls as sibling fields. #[derive(Debug, Clone, Copy, Serialize, PartialEq)] #[serde(tag = "output_format", rename_all = "lowercase")] pub enum ImageOutput { Gif(GifOptions), } #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "lowercase")] pub enum ImageBackground { Transparent, Opaque, Auto, } #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "lowercase")] pub enum ImageQuality { Low, Medium, High, Auto, } #[derive(Debug, Clone, Deserialize, PartialEq, Eq)] pub struct ImageResponse { pub created: u64, pub data: Vec, #[serde(default)] pub background: Option, #[serde(default)] pub quality: Option, #[serde(default)] pub size: Option, } #[derive(Debug, Clone, Deserialize, PartialEq, Eq)] pub struct ImageData { pub b64_json: String, #[serde(default)] pub generation_id: Option, }