gproxy_protocol/openai/create_image_edit/
stream.rs1use serde::{Deserialize, Serialize};
2
3use crate::openai::create_image::types::{
4 OpenAiApiError, OpenAiImageBackground, OpenAiImageOutputFormat, OpenAiImageUsage,
5};
6use crate::openai::create_image_edit::types::{OpenAiImageEditQuality, OpenAiImageEditSize};
7
8#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
10pub struct OpenAiCreateImageEditSseStreamBody {
11 #[serde(default, skip_serializing_if = "Vec::is_empty")]
13 pub events: Vec<OpenAiCreateImageEditSseEvent>,
14}
15
16#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
18pub struct OpenAiCreateImageEditSseEvent {
19 #[serde(default, skip_serializing_if = "Option::is_none")]
21 pub event: Option<String>,
22 pub data: OpenAiCreateImageEditSseData,
24}
25
26#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
28#[serde(untagged)]
29pub enum OpenAiCreateImageEditSseData {
30 Event(ImageEditStreamEvent),
32 Done(String),
34}
35
36impl OpenAiCreateImageEditSseData {
37 pub fn is_done(&self) -> bool {
38 matches!(self, Self::Done(marker) if marker == "[DONE]")
39 }
40}
41
42#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
44#[serde(tag = "type")]
45pub enum ImageEditStreamEvent {
46 #[serde(rename = "image_edit.partial_image")]
47 PartialImage {
48 b64_json: String,
49 background: OpenAiImageBackground,
50 created_at: u64,
51 output_format: OpenAiImageOutputFormat,
52 partial_image_index: u32,
53 quality: OpenAiImageEditQuality,
54 size: OpenAiImageEditSize,
55 },
56 #[serde(rename = "image_edit.completed")]
57 Completed {
58 b64_json: String,
59 background: OpenAiImageBackground,
60 created_at: u64,
61 output_format: OpenAiImageOutputFormat,
62 quality: OpenAiImageEditQuality,
63 size: OpenAiImageEditSize,
64 usage: OpenAiImageUsage,
65 },
66 #[serde(rename = "error")]
67 Error { error: OpenAiApiError },
68 #[serde(rename = "keepalive")]
71 Keepalive {
72 #[serde(default, skip_serializing_if = "Option::is_none")]
73 sequence_number: Option<u64>,
74 },
75}