use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ImageGenRequest {
pub prompt: String,
pub model: Option<String>,
#[serde(default = "default_n")]
pub n: u8,
pub size: Option<ImageSize>,
pub quality: Option<String>,
pub reference_image_url: Option<String>,
}
fn default_n() -> u8 {
1
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum ImageSize {
#[serde(rename = "1024x1024")]
Square1024,
#[serde(rename = "1792x1024")]
Landscape1792,
#[serde(rename = "1024x1792")]
Portrait1792,
}
impl ImageSize {
pub fn as_str(&self) -> &'static str {
match self {
Self::Square1024 => "1024x1024",
Self::Landscape1792 => "1792x1024",
Self::Portrait1792 => "1024x1792",
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GeneratedImage {
pub url: String,
pub width: Option<u32>,
pub height: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ImageGenResult {
pub images: Vec<GeneratedImage>,
pub provider: String,
pub model: String,
pub revised_prompt: Option<String>,
}