use serde::{Deserialize, Serialize};
use crate::types::images::{
ImageBackground, ImageGenUsage, ImageOutputFormat, ImageQuality, ImageSize,
};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ImageGenPartialImageEvent {
pub b64_json: String,
pub created_at: u64,
pub size: ImageSize,
pub quality: ImageQuality,
pub background: ImageBackground,
pub output_format: ImageOutputFormat,
pub partial_image_index: u8,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ImageGenCompletedEvent {
pub b64_json: String,
pub created_at: u64,
pub size: ImageSize,
pub quality: ImageQuality,
pub background: ImageBackground,
pub output_format: ImageOutputFormat,
pub usage: ImageGenUsage,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum ImageGenStreamEvent {
#[serde(rename = "image_generation.partial_image")]
PartialImage(ImageGenPartialImageEvent),
#[serde(rename = "image_generation.completed")]
Completed(ImageGenCompletedEvent),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ImageEditPartialImageEvent {
pub b64_json: String,
pub created_at: u64,
pub size: ImageSize,
pub quality: ImageQuality,
pub background: ImageBackground,
pub output_format: ImageOutputFormat,
pub partial_image_index: u8,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ImageEditCompletedEvent {
pub b64_json: String,
pub created_at: u64,
pub size: ImageSize,
pub quality: ImageQuality,
pub background: ImageBackground,
pub output_format: ImageOutputFormat,
pub usage: ImageGenUsage,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum ImageEditStreamEvent {
#[serde(rename = "image_edit.partial_image")]
PartialImage(ImageEditPartialImageEvent),
#[serde(rename = "image_edit.completed")]
Completed(ImageEditCompletedEvent),
}
#[cfg(all(feature = "_api", not(target_family = "wasm")))]
pub type ImageEditStream = std::pin::Pin<
Box<dyn futures::Stream<Item = Result<ImageEditStreamEvent, crate::error::OpenAIError>> + Send>,
>;
#[cfg(all(feature = "_api", not(target_family = "wasm")))]
pub type ImageGenStream = std::pin::Pin<
Box<dyn futures::Stream<Item = Result<ImageGenStreamEvent, crate::error::OpenAIError>> + Send>,
>;
#[cfg(feature = "_api")]
macro_rules! impl_event_type {
($($ty:ty => $event_type:expr),* $(,)?) => {
$(
impl crate::traits::EventType for $ty {
fn event_type(&self) -> &'static str {
$event_type
}
}
)*
};
}
#[cfg(feature = "_api")]
impl_event_type! {
ImageGenPartialImageEvent => "image_generation.partial_image",
ImageGenCompletedEvent => "image_generation.completed",
ImageEditPartialImageEvent => "image_edit.partial_image",
ImageEditCompletedEvent => "image_edit.completed",
}
#[cfg(feature = "_api")]
impl crate::traits::EventType for ImageGenStreamEvent {
fn event_type(&self) -> &'static str {
match self {
ImageGenStreamEvent::PartialImage(event) => event.event_type(),
ImageGenStreamEvent::Completed(event) => event.event_type(),
}
}
}
#[cfg(feature = "_api")]
impl crate::traits::EventType for ImageEditStreamEvent {
fn event_type(&self) -> &'static str {
match self {
ImageEditStreamEvent::PartialImage(event) => event.event_type(),
ImageEditStreamEvent::Completed(event) => event.event_type(),
}
}
}