async_openai/types/images/
stream.rs1use serde::{Deserialize, Serialize};
2
3use crate::types::images::{
4 ImageBackground, ImageGenUsage, ImageOutputFormat, ImageQuality, ImageSize,
5};
6
7#[derive(Debug, Clone, Serialize, Deserialize, Default)]
9pub struct ImageGenPartialImageEvent {
10 pub b64_json: String,
12 pub created_at: u64,
14 pub size: ImageSize,
16 pub quality: ImageQuality,
18 pub background: ImageBackground,
20 pub output_format: ImageOutputFormat,
22 pub partial_image_index: u8,
24}
25
26#[derive(Debug, Clone, Serialize, Deserialize, Default)]
28pub struct ImageGenCompletedEvent {
29 pub b64_json: String,
31 pub created_at: u64,
33 pub size: ImageSize,
35 pub quality: ImageQuality,
37 pub background: ImageBackground,
39 pub output_format: ImageOutputFormat,
41 pub usage: ImageGenUsage,
43
44 #[serde(skip_serializing_if = "Option::is_none")]
48 pub safety_identifier: Option<String>,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize)]
52#[serde(tag = "type")]
53pub enum ImageGenStreamEvent {
54 #[serde(rename = "image_generation.partial_image")]
56 PartialImage(ImageGenPartialImageEvent),
57 #[serde(rename = "image_generation.completed")]
59 Completed(ImageGenCompletedEvent),
60}
61
62#[derive(Debug, Clone, Serialize, Deserialize, Default)]
64pub struct ImageEditPartialImageEvent {
65 pub b64_json: String,
67 pub created_at: u64,
69 pub size: ImageSize,
71 pub quality: ImageQuality,
73 pub background: ImageBackground,
75 pub output_format: ImageOutputFormat,
77 pub partial_image_index: u8,
79}
80
81#[derive(Debug, Clone, Serialize, Deserialize, Default)]
83pub struct ImageEditCompletedEvent {
84 pub b64_json: String,
86 pub created_at: u64,
88 pub size: ImageSize,
90 pub quality: ImageQuality,
92 pub background: ImageBackground,
94 pub output_format: ImageOutputFormat,
96 pub usage: ImageGenUsage,
98
99 #[serde(skip_serializing_if = "Option::is_none")]
103 pub safety_identifier: Option<String>,
104}
105
106#[derive(Debug, Clone, Serialize, Deserialize)]
107#[serde(tag = "type")]
108pub enum ImageEditStreamEvent {
109 #[serde(rename = "image_edit.partial_image")]
111 PartialImage(ImageEditPartialImageEvent),
112 #[serde(rename = "image_edit.completed")]
114 Completed(ImageEditCompletedEvent),
115}
116
117#[cfg(feature = "_api")]
118pub type ImageEditStream = crate::types::stream::StreamResponse<ImageEditStreamEvent>;
119
120#[cfg(feature = "_api")]
121pub type ImageGenStream = crate::types::stream::StreamResponse<ImageGenStreamEvent>;
122
123#[cfg(feature = "_api")]
124macro_rules! impl_event_type {
125 ($($ty:ty => $event_type:expr),* $(,)?) => {
126 $(
127 impl crate::traits::EventType for $ty {
128 fn event_type(&self) -> &'static str {
129 $event_type
130 }
131 }
132 )*
133 };
134}
135
136#[cfg(feature = "_api")]
137impl_event_type! {
138 ImageGenPartialImageEvent => "image_generation.partial_image",
139 ImageGenCompletedEvent => "image_generation.completed",
140 ImageEditPartialImageEvent => "image_edit.partial_image",
141 ImageEditCompletedEvent => "image_edit.completed",
142}
143
144#[cfg(feature = "_api")]
145impl crate::traits::EventType for ImageGenStreamEvent {
146 fn event_type(&self) -> &'static str {
147 match self {
148 ImageGenStreamEvent::PartialImage(event) => event.event_type(),
149 ImageGenStreamEvent::Completed(event) => event.event_type(),
150 }
151 }
152}
153
154#[cfg(feature = "_api")]
155impl crate::traits::EventType for ImageEditStreamEvent {
156 fn event_type(&self) -> &'static str {
157 match self {
158 ImageEditStreamEvent::PartialImage(event) => event.event_type(),
159 ImageEditStreamEvent::Completed(event) => event.event_type(),
160 }
161 }
162}