async_openai/types/images/
stream.rs1use std::pin::Pin;
2
3use futures::Stream;
4use serde::{Deserialize, Serialize};
5
6use crate::{
7 error::OpenAIError,
8 traits::EventType,
9 types::images::{ImageBackground, ImageGenUsage, ImageOutputFormat, ImageQuality, ImageSize},
10};
11
12#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct ImageGenPartialImageEvent {
15 pub b64_json: String,
17 pub created_at: u32,
19 pub size: ImageSize,
21 pub quality: ImageQuality,
23 pub background: ImageBackground,
25 pub output_format: ImageOutputFormat,
27 pub partial_image_index: u8,
29}
30
31#[derive(Debug, Clone, Serialize, Deserialize)]
33pub struct ImageGenCompletedEvent {
34 pub b64_json: String,
36 pub created_at: u32,
38 pub size: ImageSize,
40 pub quality: ImageQuality,
42 pub background: ImageBackground,
44 pub output_format: ImageOutputFormat,
46 pub usage: ImageGenUsage,
48}
49
50#[derive(Debug, Clone, Serialize, Deserialize)]
51#[serde(tag = "type")]
52pub enum ImageGenStreamEvent {
53 #[serde(rename = "image_generation.partial_image")]
55 PartialImage(ImageGenPartialImageEvent),
56 #[serde(rename = "image_generation.completed")]
58 Completed(ImageGenCompletedEvent),
59}
60
61pub type ImageGenStream =
62 Pin<Box<dyn Stream<Item = Result<ImageGenStreamEvent, OpenAIError>> + Send>>;
63
64#[derive(Debug, Clone, Serialize, Deserialize)]
66pub struct ImageEditPartialImageEvent {
67 pub b64_json: String,
69 pub created_at: u32,
71 pub size: ImageSize,
73 pub quality: ImageQuality,
75 pub background: ImageBackground,
77 pub output_format: ImageOutputFormat,
79 pub partial_image_index: u8,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize)]
85pub struct ImageEditCompletedEvent {
86 pub b64_json: String,
88 pub created_at: u32,
90 pub size: ImageSize,
92 pub quality: ImageQuality,
94 pub background: ImageBackground,
96 pub output_format: ImageOutputFormat,
98 pub usage: ImageGenUsage,
100}
101
102pub type ImageEditStream =
103 Pin<Box<dyn Stream<Item = Result<ImageEditStreamEvent, OpenAIError>> + Send>>;
104
105#[derive(Debug, Clone, Serialize, Deserialize)]
106#[serde(tag = "type")]
107pub enum ImageEditStreamEvent {
108 #[serde(rename = "image_edit.partial_image")]
110 PartialImage(ImageEditPartialImageEvent),
111 #[serde(rename = "image_edit.completed")]
113 Completed(ImageEditCompletedEvent),
114}
115
116impl EventType for ImageGenPartialImageEvent {
117 fn event_type(&self) -> &'static str {
118 "image_generation.partial_image"
119 }
120}
121
122impl EventType for ImageGenCompletedEvent {
123 fn event_type(&self) -> &'static str {
124 "image_generation.completed"
125 }
126}
127
128impl EventType for ImageGenStreamEvent {
129 fn event_type(&self) -> &'static str {
130 match self {
131 ImageGenStreamEvent::PartialImage(event) => event.event_type(),
132 ImageGenStreamEvent::Completed(event) => event.event_type(),
133 }
134 }
135}
136
137impl EventType for ImageEditPartialImageEvent {
138 fn event_type(&self) -> &'static str {
139 "image_edit.partial_image"
140 }
141}
142
143impl EventType for ImageEditCompletedEvent {
144 fn event_type(&self) -> &'static str {
145 "image_edit.completed"
146 }
147}
148
149impl EventType for ImageEditStreamEvent {
150 fn event_type(&self) -> &'static str {
151 match self {
152 ImageEditStreamEvent::PartialImage(event) => event.event_type(),
153 ImageEditStreamEvent::Completed(event) => event.event_type(),
154 }
155 }
156}