use crate::shared::response_wrapper::OpenAIError;
use crate::shared::types::FileMeta;
use derive_builder::Builder;
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Default, Clone, strum::Display)]
#[serde(rename_all = "snake_case")]
pub enum ResponseFormat {
#[default]
#[strum(serialize = "url")]
Url,
#[strum(serialize = "b64_json")]
#[serde(rename = "b64_json")]
B64Json,
}
#[derive(Default, Debug, Serialize, Clone, strum::Display)]
pub enum ImageSize {
#[strum(serialize = "256x256")]
#[serde(rename = "256x256")]
S256x256,
#[strum(serialize = "512x512")]
#[serde(rename = "256x256")]
S512x512,
#[default]
#[strum(serialize = "1024x1024")]
#[serde(rename = "256x256")]
S1024x1024,
}
#[derive(Builder, Clone, Debug, Default, Serialize)]
#[builder(name = "CreateImageRequestBuilder")]
#[builder(pattern = "mutable")]
#[builder(setter(into, strip_option), default)]
#[builder(derive(Debug))]
#[builder(build_fn(error = "OpenAIError"))]
pub struct CreateImageRequest {
pub prompt: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub n: Option<u8>,
#[serde(skip_serializing_if = "Option::is_none")]
pub size: Option<ImageSize>,
#[serde(skip_serializing_if = "Option::is_none")]
pub response_format: Option<ResponseFormat>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user: Option<String>,
}
#[derive(Builder, Clone, Debug, Default, Serialize)]
#[builder(name = "CreateImageEditRequestBuilder")]
#[builder(pattern = "mutable")]
#[builder(setter(into, strip_option), default)]
#[builder(derive(Debug))]
#[builder(build_fn(error = "OpenAIError"))]
pub struct CreateImageEditRequest {
pub image: FileMeta,
pub prompt: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub mask: Option<FileMeta>,
#[serde(skip_serializing_if = "Option::is_none")]
pub n: Option<u8>,
#[serde(skip_serializing_if = "Option::is_none")]
pub size: Option<ImageSize>,
#[serde(skip_serializing_if = "Option::is_none")]
pub response_format: Option<ResponseFormat>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user: Option<String>,
}
#[derive(Builder, Clone, Debug, Default, Serialize)]
#[builder(name = "CreateImageVariationRequestBuilder")]
#[builder(pattern = "mutable")]
#[builder(setter(into, strip_option), default)]
#[builder(derive(Debug))]
#[builder(build_fn(error = "OpenAIError"))]
pub struct CreateImageVariationRequest {
pub image: FileMeta,
#[serde(skip_serializing_if = "Option::is_none")]
pub n: Option<u8>,
#[serde(skip_serializing_if = "Option::is_none")]
pub size: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub response_format: Option<ResponseFormat>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user: Option<String>,
}
#[derive(Debug, Deserialize, Clone, Serialize)]
#[serde(rename_all = "lowercase")]
pub enum ImageData {
Url(String),
#[serde(rename = "b64_json")]
B64Json(String),
}
#[derive(Debug, Deserialize, Clone, Serialize)]
pub struct ImageResponse {
pub created: i64,
pub data: Vec<ImageData>,
}