1
1
{% include "partial_header.j2" %}
2
2
3
3
use reqwest;
4
+ use serde::{Serialize, Deserialize};
4
5
use crate::datadog::*;
5
6
6
7
{% for path , method , operation in operations |sort (attribute ="2.operationId" , case_sensitive =True ) %}
@@ -72,6 +73,7 @@ impl {{ structName }} {
72
73
{% for path , method , operation in operations |sort (attribute ="2.operationId" , case_sensitive =True ) %}
73
74
{% - set httpMethod = method .upper () %}
74
75
{% - set returnType = operation |return_type (version ) %}
76
+ {% - set formParameter = operation |form_parameter %}
75
77
{% if operation .description is defined %}
76
78
{{ operation.description | block_comment }}
77
79
{% - endif %}
@@ -88,7 +90,7 @@ impl {{ structName }} {
88
90
pub async fn {{operation.operationId | snake_case}}_with_http_info(&self{% for name , parameter in operation |parameters %}{% if loop .first %} , params: {{operation.operationId}}Params{% endif %}{% endfor %} ) -> Result<ResponseContent <{% if returnType %}{{returnType}}{% else %}(){% endif %} >, Error<{{operation.operationId}}Error>> {
89
91
let local_configuration = &self.config;
90
92
91
- // unbox the parameters
93
+ // unbox and build parameters
92
94
{% - for name , parameter in operation |parameters %}
93
95
let {{name|variable_name}} = params.{{name|variable_name}};
94
96
{% - endfor %}
@@ -106,80 +108,40 @@ impl {{ structName }} {
106
108
{% - endif %}
107
109
{% endfor %} );
108
110
let mut local_req_builder = local_client.request(reqwest::Method::{{ httpMethod }}, local_uri_str.as_str());
109
- {#
110
- {{#queryParams}}
111
- {{#required}}
112
- {{#isArray}}
113
- local_req_builder = match "{{collectionFormat}}" {
114
- "multi" => local_req_builder.query(&{{{paramName}}}.into_iter().map(|p| ("{{{baseName}}}".to_owned(), p.to_string())).collect::<Vec<(std::string::String, std::string::String)>>()),
115
- _ => local_req_builder.query(&[("{{{baseName}}}", &{{{paramName}}}.into_iter().map(|p| p.to_string()).collect::<Vec<String>>().join(",").to_string())]),
111
+
112
+ {% for name , parameter in operation |parameters if parameter .in == "query" %}
113
+ {% - set schema = parameter | parameter_schema %}
114
+ {% - if parameter .required and schema .type == "array" %}
115
+ local_req_builder = local_req_builder.query(& [("{{name}}", & {{name|variable_name}}.into_iter().map(|p| p.to_string()).collect::<Vec <String >>().join(",").to_string())]);
116
+ {% - elif not parameter .required and schema .type == "array" %}
117
+ if let Some(ref local) = {{name|variable_name}} {
118
+ local_req_builder = local_req_builder.query(& [("{{name}}", &local.into_iter().map(|p| p.to_string()).collect::<Vec <String >>().join(",").to_string())]);
116
119
};
117
- {{/isArray}}
118
- {{^isArray}}
119
- {{^isNullable}}
120
- local_req_builder = local_req_builder.query(&[("{{{baseName}}}", &{{{paramName}}}.to_string())]);
121
- {{/isNullable}}
122
- {{#isNullable}}
123
- {{#isDeepObject}}
124
- if let Some(ref local_str) = {{{paramName}}} {
125
- let params = crate::apis::parse_deep_object("{{{baseName}}}", local_str);
126
- local_req_builder = local_req_builder.query(¶ms);
120
+ {% - elif parameter .required %}
121
+ local_req_builder = local_req_builder.query(& [("{{name}}", & {{name|variable_name}}.to_string())]);
122
+ {% - else %}
123
+ if let Some(ref local_str) = {{name|variable_name}} {
124
+ local_req_builder = local_req_builder.query(& [("{{name}}", &local_str.to_string())]);
127
125
};
128
- {{/isDeepObject}}
129
- {{^isDeepObject}}
130
- if let Some(ref local_str) = {{{paramName}}} {
131
- local_req_builder = local_req_builder.query(&[("{{{baseName}}}", &local_str.to_string())]);
126
+ {% - endif %}
127
+ {% - endfor %}
128
+
129
+ {% for name , parameter in operation |parameters if parameter .in == "header" %}
130
+ {% - if not parameter .required %}
131
+ if let Some(ref local) = {{name|variable_name}} {
132
+ local_req_builder = local_req_builder.header("{{name}}", &local.to_string());
132
133
};
133
- {{/isDeepObject}}
134
- {{/isNullable}}
135
- {{/isArray}}
136
- {{/required}}
137
- {{^required}}
138
- if let Some(ref local_str) = {{{paramName}}} {
139
- {{#isArray}}
140
- local_req_builder = match "{{collectionFormat}}" {
141
- "multi" => local_req_builder.query(&local_str.into_iter().map(|p| ("{{{baseName}}}".to_owned(), p.to_string())).collect::<Vec<(std::string::String, std::string::String)>>()),
142
- _ => local_req_builder.query(&[("{{{baseName}}}", &local_str.into_iter().map(|p| p.to_string()).collect::<Vec<String>>().join(",").to_string())]),
143
- };
144
- {{/isArray}}
145
- {{^isArray}}
146
- {{#isDeepObject}}
147
- let params = crate::apis::parse_deep_object("{{{baseName}}}", local_str);
148
- local_req_builder = local_req_builder.query(¶ms);
149
- {{/isDeepObject}}
150
- {{^isDeepObject}}
151
- local_req_builder = local_req_builder.query(&[("{{{baseName}}}", &local_str.to_string())]);
152
- {{/isDeepObject}}
153
- {{/isArray}}
154
- }
155
- {{/required}}
156
- {{/queryParams}}
157
- #}
134
+ {% - else %}
135
+ local_req_builder = local_req_builder.header("{{name}}", & {{name|variable_name}}.to_string());
136
+ {% - endif %}
137
+ {% - endfor %}
138
+
139
+ // build user agent
158
140
if let Some(ref local_user_agent) = local_configuration.user_agent {
159
141
local_req_builder = local_req_builder.header(reqwest::header::USER_AGENT, local_user_agent.clone());
160
142
}
161
- {#
162
- {{#hasHeaderParams}}
163
- {{#headerParams}}
164
- {{#required}}
165
- {{^isNullable}}
166
- local_req_builder = local_req_builder.header("{{{baseName}}}", {{{paramName}}}{{#isArray}}.join(","){{/isArray}}.to_string());
167
- {{/isNullable}}
168
- {{#isNullable}}
169
- match {{{paramName}}} {
170
- Some(local_param_value) => { local_req_builder = local_req_builder.header("{{{baseName}}}", local_param_value{{#isArray}}.join(","){{/isArray}}.to_string()); },
171
- None => { local_req_builder = local_req_builder.header("{{{baseName}}}", ""); },
172
- }
173
- {{/isNullable}}
174
- {{/required}}
175
- {{^required}}
176
- if let Some(local_param_value) = {{{paramName}}} {
177
- local_req_builder = local_req_builder.header("{{{baseName}}}", local_param_value{{#isArray}}.join(","){{/isArray}}.to_string());
178
- }
179
- {{/required}}
180
- {{/headerParams}}
181
- {{/hasHeaderParams}}
182
- #}
143
+
144
+ // build auth
183
145
{% - set authMethods = operation .security if "security" in operation else openapi .security %}
184
146
{% - if authMethods %}
185
147
{% - for authMethod in authMethods %}
@@ -193,109 +155,29 @@ impl {{ structName }} {
193
155
{% - endfor %}
194
156
{% - endfor %}
195
157
{% - endif %}
196
- {#
197
- {{#isMultipart}}
198
- {{#hasFormParams}}
158
+
159
+ {% if formParameter %}
160
+ // build form parameters
161
+ {% - if formParameter .required %}
199
162
let mut local_form = reqwest::multipart::Form::new();
200
- {{#formParams}}
201
- {{#isFile}}
202
- {{^supportAsync}}
203
- {{#required}}
204
- {{^isNullable}}
205
- local_form = local_form.file("{{{baseName}}}", {{{paramName}}})?;
206
- {{/isNullable}}
207
- {{#isNullable}}
208
- match {{{paramName}}} {
209
- Some(local_param_value) => { local_form = local_form.file("{{{baseName}}}", local_param_value)?; },
210
- None => { unimplemented!("Required nullable form file param not supported"); },
211
- }
212
- {{/isNullable}}
213
- {{/required}}
214
- {{^required}}
215
- if let Some(local_param_value) = {{{paramName}}} {
216
- local_form = local_form.file("{{{baseName}}}", local_param_value)?;
217
- }
218
- {{/required}}
219
- // TODO: support file upload for '{{{baseName}}}' parameter
220
-
221
- {{/isFile}}
222
- {{^isFile}}
223
- {{#required}}
224
- {{^isNullable}}
225
- local_form = local_form.text("{{{baseName}}}", {{{paramName}}}{{#isArray}}.into_iter().map(|p| p.to_string()).collect::<Vec<String>>().join(","){{/isArray}}.to_string());
226
- {{/isNullable}}
227
- {{#isNullable}}
228
- match {{{paramName}}} {
229
- Some(local_param_value) => { local_form = local_form.text("{{{baseName}}}", local_param_value{{#isArray}}.into_iter().map(|p| p.to_string()).collect::<Vec<String>>().join(","){{/isArray}}.to_string()); },
230
- None => { local_form = local_form.text("{{{baseName}}}", ""); },
231
- }
232
- {{/isNullable}}
233
- {{/required}}
234
- {{^required}}
235
- if let Some(local_param_value) = {{{paramName}}} {
236
- local_form = local_form.text("{{{baseName}}}", local_param_value{{#isArray}}.into_iter().map(|p| p.to_string()).collect::<Vec<String>>().join(","){{/isArray}}.to_string());
237
- }
238
- {{/required}}
239
- {{/isFile}}
240
- {{/formParams}}
163
+ local_form = local_form.part("{{formParameter.name}}", reqwest::multipart::Part::bytes({{formParameter.name}}).file_name("{{formParameter.name}}"));
241
164
local_req_builder = local_req_builder.multipart(local_form);
242
- {{/hasFormParams}}
243
- {{/isMultipart}}
244
- {{^isMultipart}}
245
- {{#hasFormParams}}
246
- let mut local_form_params = std::collections::HashMap::new();
247
- {{#formParams}}
248
- {{#isFile}}
249
- {{#required}}
250
- {{^isNullable}}
251
- local_form_params.insert("{{{baseName}}}", unimplemented!("File form param not supported with x-www-form-urlencoded content"));
252
- {{/isNullable}}
253
- {{#isNullable}}
254
- match {{{paramName}}} {
255
- Some(local_param_value) => { local_form_params.insert("{{{baseName}}}", unimplemented!("File form param not supported with x-www-form-urlencoded content")); },
256
- None => { unimplemented!("Required nullable file form param not supported with x-www-form-urlencoded content"); },
257
- }
258
- {{/isNullable}}
259
- {{/required}}
260
- {{^required}}
261
- if let Some(local_param_value) = {{{paramName}}} {
262
- local_form_params.insert("{{{baseName}}}", unimplemented!("File form param not supported with x-www-form-urlencoded content"));
263
- }
264
- {{/required}}
265
- {{/isFile}}
266
- {{^isFile}}
267
- {{#required}}
268
- {{^isNullable}}
269
- local_form_params.insert("{{{baseName}}}", {{{paramName}}}{{#isArray}}.into_iter().map(|p| p.to_string()).collect::<Vec<String>>().join(","){{/isArray}}.to_string());
270
- {{/isNullable}}
271
- {{#isNullable}}
272
- match {{{paramName}}} {
273
- Some(local_param_value) => { local_form_params.insert("{{{baseName}}}", local_param_value{{#isArray}}.into_iter().map(|p| p.to_string()).collect::<Vec<String>>().join(","){{/isArray}}.to_string()); },
274
- None => { local_form_params.insert("{{{baseName}}}", ""); },
275
- }
276
- {{/isNullable}}
277
- {{/required}}
278
- {{^required}}
279
- if let Some(local_param_value) = {{{paramName}}} {
280
- local_form_params.insert("{{{baseName}}}", local_param_value{{#isArray}}.into_iter().map(|p| p.to_string()).collect::<Vec<String>>().join(","){{/isArray}}.to_string());
281
- }
282
- {{/required}}
283
- {{/isFile}}
284
- {{/formParams}}
285
- local_req_builder = local_req_builder.form(&local_form_params);
286
- {{/hasFormParams}}
287
- {{/isMultipart}}
288
- #}
289
- {% - if operation .requestBody is defined and not formParameter %}
290
- {% - set isBodyOptional = False if "required" in operation .requestBody and operation .requestBody .required else True %}
291
- // body params
292
- {% - if isBodyOptional %}
293
- if {{operation.get("x-codegen-request-body-name", "body")|variable_name}}.is_some() {
294
- local_req_builder = local_req_builder.json(& {{operation.get("x-codegen-request-body-name", "body")|variable_name}}.unwrap());
295
- }
296
165
{% - else %}
297
- local_req_builder = local_req_builder.json(& {{operation.get("x-codegen-request-body-name", "body")|variable_name}});
166
+ if let Some({{formParameter.name}}) = {{formParameter.name}} {
167
+ let mut local_form = reqwest::multipart::Form::new();
168
+ local_form = local_form.part("{{formParameter.name}}", reqwest::multipart::Part::bytes({{formParameter.name}}).file_name("{{formParameter.name}}"));
169
+ local_req_builder = local_req_builder.multipart(local_form);
170
+ };
171
+ {% - endif %}
298
172
{% - endif %}
173
+
174
+ {% - if operation .requestBody is defined and not formParameter %}
175
+ // build body parameters
176
+ let output = Vec::new();
177
+ let mut ser = serde_json::Serializer::with_formatter(output, DDFormatter);
178
+ if {{operation.get("x-codegen-request-body-name", "body")|variable_name}}.serialize(&mut ser).is_ok() {
179
+ local_req_builder = local_req_builder.body(ser.into_inner());
180
+ }
299
181
{% - endif %}
300
182
301
183
let local_req = local_req_builder.build()?;
0 commit comments