Skip to main content

gproxy_protocol/openai/create_image_edit/
request.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::openai::create_image_edit::types::{
6    HttpMethod, OpenAiImageBackground, OpenAiImageEditInputFidelity, OpenAiImageEditInputImage,
7    OpenAiImageEditModel, OpenAiImageEditQuality, OpenAiImageEditSize, OpenAiImageModeration,
8    OpenAiImageOutputFormat,
9};
10
11/// Request descriptor for OpenAI `images.edit` endpoint.
12#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
13pub struct OpenAiCreateImageEditRequest {
14    /// HTTP method.
15    pub method: HttpMethod,
16    /// Path parameters.
17    pub path: PathParameters,
18    /// Query parameters.
19    pub query: QueryParameters,
20    /// Request headers.
21    pub headers: RequestHeaders,
22    /// Request body.
23    pub body: RequestBody,
24}
25
26impl Default for OpenAiCreateImageEditRequest {
27    fn default() -> Self {
28        Self {
29            method: HttpMethod::Post,
30            path: PathParameters::default(),
31            query: QueryParameters::default(),
32            headers: RequestHeaders::default(),
33            body: RequestBody::default(),
34        }
35    }
36}
37
38/// OpenAI `/images/edits` does not define path params.
39#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
40pub struct PathParameters {}
41
42/// OpenAI `/images/edits` does not define query params.
43#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
44pub struct QueryParameters {}
45
46/// Proxy-side request model does not carry auth headers.
47#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
48pub struct RequestHeaders {
49    #[serde(flatten, default, skip_serializing_if = "BTreeMap::is_empty")]
50    pub extra: BTreeMap<String, String>,
51}
52
53/// Request body for OpenAI `/images/edits`.
54#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
55pub struct RequestBody {
56    /// Input images to edit or extend.
57    pub images: Vec<OpenAiImageEditInputImage>,
58    /// Text description of the desired edit.
59    pub prompt: String,
60    /// Background behavior for generated image output.
61    #[serde(default, skip_serializing_if = "Option::is_none")]
62    pub background: Option<OpenAiImageBackground>,
63    /// Fidelity to the original input images.
64    #[serde(default, skip_serializing_if = "Option::is_none")]
65    pub input_fidelity: Option<OpenAiImageEditInputFidelity>,
66    /// Optional mask reference. Upstream requires exactly one of `file_id` or `image_url`.
67    #[serde(default, skip_serializing_if = "Option::is_none")]
68    pub mask: Option<OpenAiImageEditInputImage>,
69    /// Model identifier.
70    #[serde(default, skip_serializing_if = "Option::is_none")]
71    pub model: Option<OpenAiImageEditModel>,
72    /// Moderation level for GPT image models.
73    #[serde(default, skip_serializing_if = "Option::is_none")]
74    pub moderation: Option<OpenAiImageModeration>,
75    /// Number of edited images to generate.
76    #[serde(default, skip_serializing_if = "Option::is_none")]
77    pub n: Option<u32>,
78    /// Compression percentage for `jpeg` or `webp` output.
79    #[serde(default, skip_serializing_if = "Option::is_none")]
80    pub output_compression: Option<u8>,
81    /// Output encoding format for GPT image models.
82    #[serde(default, skip_serializing_if = "Option::is_none")]
83    pub output_format: Option<OpenAiImageOutputFormat>,
84    /// Number of partial images requested in streaming mode.
85    #[serde(default, skip_serializing_if = "Option::is_none")]
86    pub partial_images: Option<u32>,
87    /// Requested output quality.
88    #[serde(default, skip_serializing_if = "Option::is_none")]
89    pub quality: Option<OpenAiImageEditQuality>,
90    /// Requested output dimensions.
91    #[serde(default, skip_serializing_if = "Option::is_none")]
92    pub size: Option<OpenAiImageEditSize>,
93    /// Whether to stream partial image events.
94    #[serde(default, skip_serializing_if = "Option::is_none")]
95    pub stream: Option<bool>,
96    /// Stable end-user identifier.
97    #[serde(default, skip_serializing_if = "Option::is_none")]
98    pub user: Option<String>,
99}