Skip to content

Commit c8bb57f

Browse files
committed
[rust] support model/maps as deep/explode params
1 parent d6c4634 commit c8bb57f

2 files changed

Lines changed: 72 additions & 14 deletions

File tree

modules/openapi-generator/src/main/resources/rust/reqwest-trait/api.mustache

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -192,36 +192,66 @@ impl {{classname}} for {{classname}}Client {
192192
{{/isNullable}}
193193
{{#isNullable}}
194194
{{#isDeepObject}}
195-
if let Some(ref local_var_str) = {{{paramName}}} {
196-
let params = crate::apis::parse_deep_object("{{{baseName}}}", local_var_str);
195+
{{^isExplode}}
196+
if let Some(ref param_value) = {{{paramName}}} {
197+
let params = crate::apis::parse_deep_object("{{{baseName}}}", &serde_json::to_value(param_value)?);
197198
local_var_req_builder = local_var_req_builder.query(&params);
198-
};
199+
}
200+
{{/isExplode}}
201+
{{#isExplode}}
202+
{{#isModel}}
203+
if let Some(ref param_value) = {{{paramName}}} {
204+
local_var_req_builder = local_var_req_builder.query(&param_value);
205+
}
206+
{{/isModel}}
207+
{{#isMap}}
208+
if let Some(ref param_value) = {{{paramName}}} {
209+
let mut query_params = Vec::with_capacity(param_value.len());
210+
for (key, value) in param_value.iter() {
211+
query_params.push((key.to_string(), serde_json::to_string(value)?));
212+
}
213+
local_var_req_builder = local_var_req_builder.query(&query_params);
214+
}
215+
{{/isMap}}
216+
{{/isExplode}}
199217
{{/isDeepObject}}
200218
{{^isDeepObject}}
201-
if let Some(ref local_var_str) = {{{paramName}}} {
202-
local_var_req_builder = local_var_req_builder.query(&[("{{{baseName}}}", &local_var_str.to_string())]);
219+
if let Some(ref param_value) = {{{paramName}}} {
220+
local_var_req_builder = local_var_req_builder.query(&[("{{{baseName}}}", &param_value.to_string())]);
203221
};
204222
{{/isDeepObject}}
205223
{{/isNullable}}
206224
{{/isArray}}
207225
{{/required}}
208226
{{^required}}
209-
if let Some(ref local_var_str) = {{{paramName}}} {
227+
if let Some(ref param_value) = {{{paramName}}} {
210228
{{#isArray}}
211229
local_var_req_builder = match "{{collectionFormat}}" {
212-
"multi" => local_var_req_builder.query(&local_var_str.into_iter().map(|p| ("{{{baseName}}}".to_owned(), p.to_string())).collect::<Vec<(std::string::String, std::string::String)>>()),
213-
_ => local_var_req_builder.query(&[("{{{baseName}}}", &local_var_str.into_iter().map(|p| p.to_string()).collect::<Vec<String>>().join(",").to_string())]),
230+
"multi" => local_var_req_builder.query(&param_value.into_iter().map(|p| ("{{{baseName}}}".to_owned(), p.to_string())).collect::<Vec<(std::string::String, std::string::String)>>()),
231+
_ => local_var_req_builder.query(&[("{{{baseName}}}", &param_value.into_iter().map(|p| p.to_string()).collect::<Vec<String>>().join(",").to_string())]),
214232
};
215233
{{/isArray}}
216-
{{^isArray}}
217234
{{#isDeepObject}}
218-
let params = crate::apis::parse_deep_object("{{{baseName}}}", local_var_str);
235+
{{^isExplode}}
236+
let params = crate::apis::parse_deep_object("{{{baseName}}}", &serde_json::to_value(param_value)?);
219237
local_var_req_builder = local_var_req_builder.query(&params);
238+
{{/isExplode}}
239+
{{#isExplode}}
240+
{{#isModel}}
241+
local_var_req_builder = local_var_req_builder.query(&param_value);
242+
{{/isModel}}
243+
{{#isMap}}
244+
let mut query_params = Vec::with_capacity(param_value.len());
245+
for (key, value) in param_value.iter() {
246+
query_params.push((key.to_string(), serde_json::to_string(value)?));
247+
}
248+
local_var_req_builder = local_var_req_builder.query(&query_params);
249+
{{/isMap}}
250+
{{/isExplode}}
220251
{{/isDeepObject}}
221252
{{^isDeepObject}}
222-
local_var_req_builder = local_var_req_builder.query(&[("{{{baseName}}}", &local_var_str.to_string())]);
253+
local_var_req_builder = local_var_req_builder.query(&[("{{{baseName}}}", &param_value.to_string())]);
223254
{{/isDeepObject}}
224-
{{/isArray}}
225255
}
226256
{{/required}}
227257
{{/queryParams}}

modules/openapi-generator/src/main/resources/rust/reqwest/api.mustache

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,22 @@ pub {{#supportAsync}}async {{/supportAsync}}fn {{{operationId}}}(configuration:
160160
{{#isNullable}}
161161
{{#isDeepObject}}
162162
if let Some(ref param_value) = {{{vendorExtensions.x-rust-param-identifier}}} {
163-
let params = crate::apis::parse_deep_object("{{{baseName}}}", param_value);
163+
{{^isExplode}}
164+
let params = crate::apis::parse_deep_object("{{{baseName}}}", &serde_json::to_value(param_value)?);
164165
req_builder = req_builder.query(&params);
166+
{{/isExplode}}
167+
{{#isExplode}}
168+
{{#isModel}}
169+
req_builder = req_builder.query(&param_value);
170+
{{/isModel}}
171+
{{#isMap}}
172+
let mut query_params = Vec::with_capacity(param_value.len());
173+
for (key, value) in param_value.iter() {
174+
query_params.push((key.to_string(), serde_json::to_string(value)?));
175+
}
176+
req_builder = req_builder.query(&query_params);
177+
{{/isMap}}
178+
{{/isExplode}}
165179
};
166180
{{/isDeepObject}}
167181
{{^isDeepObject}}
@@ -182,8 +196,22 @@ pub {{#supportAsync}}async {{/supportAsync}}fn {{{operationId}}}(configuration:
182196
{{/isArray}}
183197
{{^isArray}}
184198
{{#isDeepObject}}
185-
let params = crate::apis::parse_deep_object("{{{baseName}}}", param_value);
199+
{{^isExplode}}
200+
let params = crate::apis::parse_deep_object("{{{baseName}}}", &serde_json::to_value(param_value)?);
186201
req_builder = req_builder.query(&params);
202+
{{/isExplode}}
203+
{{#isExplode}}
204+
{{#isModel}}
205+
req_builder = req_builder.query(&param_value);
206+
{{/isModel}}
207+
{{#isMap}}
208+
let mut query_params = Vec::with_capacity(param_value.len());
209+
for (key, value) in param_value.iter() {
210+
query_params.push((key.to_string(), serde_json::to_string(value)?));
211+
}
212+
req_builder = req_builder.query(&query_params);
213+
{{/isMap}}
214+
{{/isExplode}}
187215
{{/isDeepObject}}
188216
{{^isDeepObject}}
189217
req_builder = req_builder.query(&[("{{{baseName}}}", &param_value.to_string())]);

0 commit comments

Comments
 (0)