Skip to main content

outfox_openai/spec/images/
form.rs

1use crate::error::OpenAIError;
2use crate::spec::images::{CreateImageEditRequest, CreateImageVariationRequest, ImageEditInput};
3use crate::traits::AsyncTryFrom;
4use crate::util::create_file_part;
5
6impl AsyncTryFrom<CreateImageEditRequest> for reqwest::multipart::Form {
7    type Error = OpenAIError;
8
9    async fn try_from(request: CreateImageEditRequest) -> Result<Self, Self::Error> {
10        let mut form = reqwest::multipart::Form::new().text("prompt", request.prompt);
11
12        match request.image {
13            ImageEditInput::Image(image) => {
14                let image_part = create_file_part(image.source).await?;
15                form = form.part("image", image_part);
16            }
17            ImageEditInput::Images(images) => {
18                for image in images {
19                    let image_part = create_file_part(image.source).await?;
20                    form = form.part("image[]", image_part);
21                }
22            }
23        }
24
25        if let Some(mask) = request.mask {
26            let mask_part = create_file_part(mask.source).await?;
27            form = form.part("mask", mask_part);
28        }
29
30        if let Some(background) = request.background {
31            form = form.text("background", background.to_string())
32        }
33
34        if let Some(model) = request.model {
35            form = form.text("model", model.to_string())
36        }
37
38        if let Some(n) = request.n {
39            form = form.text("n", n.to_string())
40        }
41
42        if let Some(size) = request.size {
43            form = form.text("size", size.to_string())
44        }
45
46        if let Some(response_format) = request.response_format {
47            form = form.text("response_format", response_format.to_string())
48        }
49
50        if let Some(output_format) = request.output_format {
51            form = form.text("output_format", output_format.to_string())
52        }
53
54        if let Some(output_compression) = request.output_compression {
55            form = form.text("output_compression", output_compression.to_string())
56        }
57
58        if let Some(output_compression) = request.output_compression {
59            form = form.text("output_compression", output_compression.to_string())
60        }
61
62        if let Some(user) = request.user {
63            form = form.text("user", user)
64        }
65
66        if let Some(input_fidelity) = request.input_fidelity {
67            form = form.text("input_fidelity", input_fidelity.to_string())
68        }
69
70        if let Some(stream) = request.stream {
71            form = form.text("stream", stream.to_string())
72        }
73
74        if let Some(partial_images) = request.partial_images {
75            form = form.text("partial_images", partial_images.to_string())
76        }
77
78        if let Some(quality) = request.quality {
79            form = form.text("quality", quality.to_string())
80        }
81
82        Ok(form)
83    }
84}
85
86impl AsyncTryFrom<CreateImageVariationRequest> for reqwest::multipart::Form {
87    type Error = OpenAIError;
88
89    async fn try_from(request: CreateImageVariationRequest) -> Result<Self, Self::Error> {
90        let image_part = create_file_part(request.image.source).await?;
91
92        let mut form = reqwest::multipart::Form::new().part("image", image_part);
93
94        if let Some(model) = request.model {
95            form = form.text("model", model.to_string())
96        }
97
98        if let Some(n) = request.n {
99            form = form.text("n", n.to_string())
100        }
101
102        if let Some(size) = request.size {
103            form = form.text("size", size.to_string())
104        }
105
106        if let Some(response_format) = request.response_format {
107            form = form.text("response_format", response_format.to_string())
108        }
109
110        if let Some(user) = request.user {
111            form = form.text("user", user)
112        }
113        Ok(form)
114    }
115}