outfox_openai/spec/images/
form.rs1use 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}