Skip to content

Commit 4a494b4

Browse files
mfarrugiwing328
authored andcommitted
[Rust] Support formParams and fix list-params. (#1678)
* [Rust] Support formParams and fix list-params. Form params were previously unsupported, and list-params would produce code that didn't compile. * update rust samples
1 parent 10ecc0e commit 4a494b4

File tree

6 files changed

+77
-36
lines changed

6 files changed

+77
-36
lines changed

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

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ impl {{{classname}}}Client {
2121
pub trait {{{classname}}} {
2222
{{#operations}}
2323
{{#operation}}
24-
fn {{{operationId}}}(&self, {{#allParams}}{{{paramName}}}: {{#isString}}&str{{/isString}}{{#isUuid}}&str{{/isUuid}}{{^isString}}{{^isUuid}}{{^isPrimitiveType}}{{^isContainer}}::models::{{/isContainer}}{{/isPrimitiveType}}{{{dataType}}}{{/isUuid}}{{/isString}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) -> Result<{{^returnType}}(){{/returnType}}{{#returnType}}{{{returnType}}}{{/returnType}}, Error>;
24+
fn {{{operationId}}}(&self, {{#allParams}}{{{paramName}}}: {{#isListContainer}}Vec<{{/isListContainer}}{{#isString}}&str{{/isString}}{{#isUuid}}&str{{/isUuid}}{{^isString}}{{^isUuid}}{{^isPrimitiveType}}{{^isContainer}}::models::{{/isContainer}}{{/isPrimitiveType}}{{{dataType}}}{{/isUuid}}{{/isString}}{{#isListContainer}}>{{/isListContainer}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) -> Result<{{^returnType}}(){{/returnType}}{{#returnType}}{{{returnType}}}{{/returnType}}, Error>;
2525
{{/operation}}
2626
{{/operations}}
2727
}
@@ -30,16 +30,23 @@ pub trait {{{classname}}} {
3030
impl {{{classname}}} for {{{classname}}}Client {
3131
{{#operations}}
3232
{{#operation}}
33-
fn {{{operationId}}}(&self, {{#allParams}}{{{paramName}}}: {{#isString}}&str{{/isString}}{{#isUuid}}&str{{/isUuid}}{{^isString}}{{^isUuid}}{{^isPrimitiveType}}{{^isContainer}}::models::{{/isContainer}}{{/isPrimitiveType}}{{{dataType}}}{{/isUuid}}{{/isString}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) -> Result<{{^returnType}}(){{/returnType}}{{#returnType}}{{{returnType}}}{{/returnType}}, Error> {
33+
fn {{{operationId}}}(&self, {{#allParams}}{{{paramName}}}: {{#isListContainer}}Vec<{{/isListContainer}}{{#isString}}&str{{/isString}}{{#isUuid}}&str{{/isUuid}}{{^isString}}{{^isUuid}}{{^isPrimitiveType}}{{^isContainer}}::models::{{/isContainer}}{{/isPrimitiveType}}{{{dataType}}}{{/isUuid}}{{/isString}}{{#isListContainer}}>{{/isListContainer}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) -> Result<{{^returnType}}(){{/returnType}}{{#returnType}}{{{returnType}}}{{/returnType}}, Error> {
3434
let configuration: &configuration::Configuration = self.configuration.borrow();
3535
let client = &configuration.client;
3636
37+
{{#hasFormParams}}
38+
let form = [
39+
{{#formParams}}
40+
("{{{baseName}}}", &{{{paramName}}}{{#isListContainer}}.into_iter().map(|p| p.to_string()).collect::<Vec<String>>().join(","){{/isListContainer}}.to_string()),
41+
{{/formParams}}
42+
];
43+
{{/hasFormParams}}
3744
let query_string = {
3845
let mut query = ::url::form_urlencoded::Serializer::new(String::new());
39-
{{#queryParams}}
46+
{{#queryParams}}
4047
query.append_pair("{{{baseName}}}", &{{{paramName}}}{{#isListContainer}}.into_iter().map(|p| p.to_string()).collect::<Vec<String>>().join(","){{/isListContainer}}.to_string());
41-
{{/queryParams}}
42-
{{#hasAuthMethods}}{{#authMethods}}{{#isApiKey}}{{#isKeyInQuery}}
48+
{{/queryParams}}
49+
{{#hasAuthMethods}}{{#authMethods}}{{#isApiKey}}{{#isKeyInQuery}}
4350
if let Some(ref apikey) = configuration.api_key {
4451
let key = apikey.key.clone();
4552
let val = match apikey.prefix {
@@ -48,7 +55,7 @@ impl {{{classname}}} for {{{classname}}}Client {
4855
};
4956
query.append_pair("{{{keyParamName}}}".to_owned(), val);
5057
}
51-
{{/isKeyInQuery}}{{/isApiKey}}{{/authMethods}}{{/hasAuthMethods}}
58+
{{/isKeyInQuery}}{{/isApiKey}}{{/authMethods}}{{/hasAuthMethods}}
5259
query.finish()
5360
};
5461
let uri_str = format!("{}{{{path}}}?{}", configuration.base_path, query_string{{#pathParams}}, {{{baseName}}}={{{paramName}}}{{#isListContainer}}.join(",").as_ref(){{/isListContainer}}{{/pathParams}});
@@ -96,6 +103,10 @@ impl {{{classname}}} for {{{classname}}}Client {
96103
{{/bodyParams}}
97104
{{/hasBodyParam}}
98105

106+
{{#hasFormParams}}
107+
req_builder = req_builder.form(&form);
108+
{{/hasFormParams}}
109+
99110
// send request
100111
let req = req_builder.build()?;
101112

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3.3.4-SNAPSHOT
1+
4.0.0-SNAPSHOT

samples/client/petstore/rust-reqwest/src/apis/pet_api.rs

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ impl PetApiClient {
3030
pub trait PetApi {
3131
fn add_pet(&self, pet: ::models::Pet) -> Result<(), Error>;
3232
fn delete_pet(&self, pet_id: i64, api_key: &str) -> Result<(), Error>;
33-
fn find_pets_by_status(&self, status: Vec<String>) -> Result<Vec<::models::Pet>, Error>;
34-
fn find_pets_by_tags(&self, tags: Vec<String>) -> Result<Vec<::models::Pet>, Error>;
33+
fn find_pets_by_status(&self, status: Vec<Vec<String>>) -> Result<Vec<::models::Pet>, Error>;
34+
fn find_pets_by_tags(&self, tags: Vec<Vec<String>>) -> Result<Vec<::models::Pet>, Error>;
3535
fn get_pet_by_id(&self, pet_id: i64) -> Result<::models::Pet, Error>;
3636
fn update_pet(&self, pet: ::models::Pet) -> Result<(), Error>;
3737
fn update_pet_with_form(&self, pet_id: i64, name: &str, status: &str) -> Result<(), Error>;
@@ -46,7 +46,7 @@ impl PetApi for PetApiClient {
4646

4747
let query_string = {
4848
let mut query = ::url::form_urlencoded::Serializer::new(String::new());
49-
49+
5050
query.finish()
5151
};
5252
let uri_str = format!("{}/pet?{}", configuration.base_path, query_string);
@@ -65,6 +65,7 @@ impl PetApi for PetApiClient {
6565

6666
req_builder = req_builder.json(&pet);
6767

68+
6869
// send request
6970
let req = req_builder.build()?;
7071

@@ -78,7 +79,7 @@ impl PetApi for PetApiClient {
7879

7980
let query_string = {
8081
let mut query = ::url::form_urlencoded::Serializer::new(String::new());
81-
82+
8283
query.finish()
8384
};
8485
let uri_str = format!("{}/pet/{petId}?{}", configuration.base_path, query_string, petId=pet_id);
@@ -97,21 +98,22 @@ impl PetApi for PetApiClient {
9798
};
9899

99100

101+
100102
// send request
101103
let req = req_builder.build()?;
102104

103105
client.execute(req)?.error_for_status()?;
104106
Ok(())
105107
}
106108

107-
fn find_pets_by_status(&self, status: Vec<String>) -> Result<Vec<::models::Pet>, Error> {
109+
fn find_pets_by_status(&self, status: Vec<Vec<String>>) -> Result<Vec<::models::Pet>, Error> {
108110
let configuration: &configuration::Configuration = self.configuration.borrow();
109111
let client = &configuration.client;
110112

111113
let query_string = {
112114
let mut query = ::url::form_urlencoded::Serializer::new(String::new());
113115
query.append_pair("status", &status.into_iter().map(|p| p.to_string()).collect::<Vec<String>>().join(",").to_string());
114-
116+
115117
query.finish()
116118
};
117119
let uri_str = format!("{}/pet/findByStatus?{}", configuration.base_path, query_string);
@@ -129,20 +131,21 @@ impl PetApi for PetApiClient {
129131
};
130132

131133

134+
132135
// send request
133136
let req = req_builder.build()?;
134137

135138
Ok(client.execute(req)?.error_for_status()?.json()?)
136139
}
137140

138-
fn find_pets_by_tags(&self, tags: Vec<String>) -> Result<Vec<::models::Pet>, Error> {
141+
fn find_pets_by_tags(&self, tags: Vec<Vec<String>>) -> Result<Vec<::models::Pet>, Error> {
139142
let configuration: &configuration::Configuration = self.configuration.borrow();
140143
let client = &configuration.client;
141144

142145
let query_string = {
143146
let mut query = ::url::form_urlencoded::Serializer::new(String::new());
144147
query.append_pair("tags", &tags.into_iter().map(|p| p.to_string()).collect::<Vec<String>>().join(",").to_string());
145-
148+
146149
query.finish()
147150
};
148151
let uri_str = format!("{}/pet/findByTags?{}", configuration.base_path, query_string);
@@ -160,6 +163,7 @@ impl PetApi for PetApiClient {
160163
};
161164

162165

166+
163167
// send request
164168
let req = req_builder.build()?;
165169

@@ -172,7 +176,7 @@ impl PetApi for PetApiClient {
172176

173177
let query_string = {
174178
let mut query = ::url::form_urlencoded::Serializer::new(String::new());
175-
179+
176180
query.finish()
177181
};
178182
let uri_str = format!("{}/pet/{petId}?{}", configuration.base_path, query_string, petId=pet_id);
@@ -196,6 +200,7 @@ impl PetApi for PetApiClient {
196200

197201

198202

203+
199204
// send request
200205
let req = req_builder.build()?;
201206

@@ -208,7 +213,7 @@ impl PetApi for PetApiClient {
208213

209214
let query_string = {
210215
let mut query = ::url::form_urlencoded::Serializer::new(String::new());
211-
216+
212217
query.finish()
213218
};
214219
let uri_str = format!("{}/pet?{}", configuration.base_path, query_string);
@@ -227,6 +232,7 @@ impl PetApi for PetApiClient {
227232

228233
req_builder = req_builder.json(&pet);
229234

235+
230236
// send request
231237
let req = req_builder.build()?;
232238

@@ -238,9 +244,13 @@ impl PetApi for PetApiClient {
238244
let configuration: &configuration::Configuration = self.configuration.borrow();
239245
let client = &configuration.client;
240246

247+
let form = [
248+
("name", &name.to_string()),
249+
("status", &status.to_string()),
250+
];
241251
let query_string = {
242252
let mut query = ::url::form_urlencoded::Serializer::new(String::new());
243-
253+
244254
query.finish()
245255
};
246256
let uri_str = format!("{}/pet/{petId}?{}", configuration.base_path, query_string, petId=pet_id);
@@ -258,6 +268,8 @@ impl PetApi for PetApiClient {
258268
};
259269

260270

271+
req_builder = req_builder.form(&form);
272+
261273
// send request
262274
let req = req_builder.build()?;
263275

@@ -269,9 +281,13 @@ impl PetApi for PetApiClient {
269281
let configuration: &configuration::Configuration = self.configuration.borrow();
270282
let client = &configuration.client;
271283

284+
let form = [
285+
("additionalMetadata", &additional_metadata.to_string()),
286+
("file", &file.to_string()),
287+
];
272288
let query_string = {
273289
let mut query = ::url::form_urlencoded::Serializer::new(String::new());
274-
290+
275291
query.finish()
276292
};
277293
let uri_str = format!("{}/pet/{petId}/uploadImage?{}", configuration.base_path, query_string, petId=pet_id);
@@ -289,6 +305,8 @@ impl PetApi for PetApiClient {
289305
};
290306

291307

308+
req_builder = req_builder.form(&form);
309+
292310
// send request
293311
let req = req_builder.build()?;
294312

samples/client/petstore/rust-reqwest/src/apis/store_api.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ impl StoreApi for StoreApiClient {
4242

4343
let query_string = {
4444
let mut query = ::url::form_urlencoded::Serializer::new(String::new());
45-
45+
4646
query.finish()
4747
};
4848
let uri_str = format!("{}/store/order/{orderId}?{}", configuration.base_path, query_string, orderId=order_id);
@@ -56,6 +56,7 @@ impl StoreApi for StoreApiClient {
5656

5757

5858

59+
5960
// send request
6061
let req = req_builder.build()?;
6162

@@ -69,7 +70,7 @@ impl StoreApi for StoreApiClient {
6970

7071
let query_string = {
7172
let mut query = ::url::form_urlencoded::Serializer::new(String::new());
72-
73+
7374
query.finish()
7475
};
7576
let uri_str = format!("{}/store/inventory?{}", configuration.base_path, query_string);
@@ -93,6 +94,7 @@ impl StoreApi for StoreApiClient {
9394

9495

9596

97+
9698
// send request
9799
let req = req_builder.build()?;
98100

@@ -105,7 +107,7 @@ impl StoreApi for StoreApiClient {
105107

106108
let query_string = {
107109
let mut query = ::url::form_urlencoded::Serializer::new(String::new());
108-
110+
109111
query.finish()
110112
};
111113
let uri_str = format!("{}/store/order/{orderId}?{}", configuration.base_path, query_string, orderId=order_id);
@@ -119,6 +121,7 @@ impl StoreApi for StoreApiClient {
119121

120122

121123

124+
122125
// send request
123126
let req = req_builder.build()?;
124127

@@ -131,7 +134,7 @@ impl StoreApi for StoreApiClient {
131134

132135
let query_string = {
133136
let mut query = ::url::form_urlencoded::Serializer::new(String::new());
134-
137+
135138
query.finish()
136139
};
137140
let uri_str = format!("{}/store/order?{}", configuration.base_path, query_string);
@@ -146,6 +149,7 @@ impl StoreApi for StoreApiClient {
146149

147150
req_builder = req_builder.json(&order);
148151

152+
149153
// send request
150154
let req = req_builder.build()?;
151155

0 commit comments

Comments
 (0)