use std::fmt;
use std::num::NonZeroU64;
use crate::generated::schemas::{CreateImageRequest, CreateImageRequestResponseFormat};
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum ImageQuality {
Standard,
Hd,
}
impl fmt::Display for ImageQuality {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(match self {
Self::Standard => "standard",
Self::Hd => "hd",
})
}
}
impl From<ImageQuality> for String {
fn from(value: ImageQuality) -> Self {
value.to_string()
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum ImageSize {
Square256,
Square512,
Square1024,
Portrait1024x1792,
Landscape1792x1024,
}
impl fmt::Display for ImageSize {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(match self {
Self::Square256 => "256x256",
Self::Square512 => "512x512",
Self::Square1024 => "1024x1024",
Self::Portrait1024x1792 => "1024x1792",
Self::Landscape1792x1024 => "1792x1024",
})
}
}
impl From<ImageSize> for String {
fn from(value: ImageSize) -> Self {
value.to_string()
}
}
impl Default for CreateImageRequest {
fn default() -> Self {
Self {
model: None,
n: NonZeroU64::MIN, prompt: String::new(),
quality: None,
response_format: CreateImageRequestResponseFormat::Url,
size: None,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn enums_render_the_wire_strings() {
assert_eq!(String::from(ImageQuality::Standard), "standard");
assert_eq!(String::from(ImageQuality::Hd), "hd");
assert_eq!(String::from(ImageSize::Square1024), "1024x1024");
assert_eq!(String::from(ImageSize::Portrait1024x1792), "1024x1792");
}
#[test]
fn default_matches_schema_defaults() {
let req = CreateImageRequest::default();
assert_eq!(req.n, NonZeroU64::MIN);
assert_eq!(req.response_format, CreateImageRequestResponseFormat::Url);
assert!(req.quality.is_none());
}
}