Skip to content

Commit 2e81e61

Browse files
gferonbjgill
authored andcommitted
Fix enum types in structs (#3309)
I already contributed proper enum supports a few weeks ago, but somehow missed actually using them when they're used as a property. This PR fixes that. I also took the liberty of fixing a bunch of unused warnings. * Make sure we use the enum types in Rust * Fix unused warnings in Rust and regenerate samples * Use crate:: import path that works both with Rust 2015 and 2018 * Derive PartialEq and Eq in generated Rust structs and enums
1 parent a4b1c26 commit 2e81e61

File tree

33 files changed

+112
-57
lines changed

33 files changed

+112
-57
lines changed

modules/openapi-generator/src/main/resources/rust/hyper/api_mod.mustache

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,6 @@ impl<T> From<serde_json::Error> for Error<T> {
4949
}
5050
}
5151
52-
use super::models::*;
53-
5452
mod request;
5553
5654
{{#apiInfo}}

modules/openapi-generator/src/main/resources/rust/hyper/client.mustache

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ use std::rc::Rc;
33
use hyper;
44
use super::configuration::Configuration;
55

6-
pub struct APIClient<C: hyper::client::Connect> {
7-
configuration: Rc<Configuration<C>>,
6+
pub struct APIClient {
87
{{#apiInfo}}
98
{{#apis}}
109
{{#operations}}
@@ -18,12 +17,11 @@ pub struct APIClient<C: hyper::client::Connect> {
1817
{{/apiInfo}}
1918
}
2019

21-
impl<C: hyper::client::Connect> APIClient<C> {
22-
pub fn new(configuration: Configuration<C>) -> APIClient<C> {
20+
impl APIClient {
21+
pub fn new<C: hyper::client::Connect>(configuration: Configuration<C>) -> APIClient {
2322
let rc = Rc::new(configuration);
2423
2524
APIClient {
26-
configuration: rc.clone(),
2725
{{#apiInfo}}
2826
{{#apis}}
2927
{{#operations}}

modules/openapi-generator/src/main/resources/rust/hyper/configuration.mustache

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
{{>partial_header}}
22
use hyper;
3-
use std::collections::HashMap;
43

54
pub struct Configuration<C: hyper::client::Connect> {
65
pub base_path: String,

modules/openapi-generator/src/main/resources/rust/model.mustache

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,22 @@ pub enum {{classname}} {
2020

2121
{{!-- for non-enum schemas --}}
2222
{{^isEnum}}
23-
#[derive(Debug, Serialize, Deserialize)]
23+
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
2424
pub struct {{{classname}}} {
2525
{{#vars}}
2626
{{#description}}
2727
/// {{{description}}}
2828
{{/description}}
2929
#[serde(rename = "{{{baseName}}}"{{^required}}, skip_serializing_if = "Option::is_none"{{/required}})]
30-
pub {{{name}}}: {{#required}}{{#isNullable}}Option<{{/isNullable}}{{/required}}{{^required}}Option<{{/required}}{{{dataType}}}{{#required}}{{#isNullable}}>{{/isNullable}}{{/required}}{{^required}}>{{/required}},
30+
pub {{{name}}}: {{#required}}{{#isNullable}}Option<{{/isNullable}}{{/required}}{{^required}}Option<{{/required}}{{#isEnum}}{{{enumName}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{#required}}{{#isNullable}}>{{/isNullable}}{{/required}}{{^required}}>{{/required}},
3131
{{/vars}}
3232
}
3333

3434
impl {{{classname}}} {
3535
{{#description}}
3636
/// {{{description}}}
3737
{{/description}}
38-
pub fn new({{#requiredVars}}{{{name}}}: {{#isNullable}}Option<{{/isNullable}}{{{dataType}}}{{#isNullable}}>{{/isNullable}}{{^-last}}, {{/-last}}{{/requiredVars}}) -> {{{classname}}} {
38+
pub fn new({{#requiredVars}}{{{name}}}: {{#isNullable}}Option<{{/isNullable}}{{#isEnum}}{{{enumName}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{#isNullable}}>{{/isNullable}}{{^-last}}, {{/-last}}{{/requiredVars}}) -> {{{classname}}} {
3939
{{{classname}}} {
4040
{{#vars}}
4141
{{{name}}}: {{#required}}{{{name}}}{{/required}}{{^required}}{{#isListContainer}}None{{/isListContainer}}{{#isMapContainer}}None{{/isMapContainer}}{{^isContainer}}None{{/isContainer}}{{/required}},
@@ -49,7 +49,7 @@ impl {{{classname}}} {
4949
{{#vars}}
5050
{{#isEnum}}
5151
/// {{{description}}}
52-
#[derive(Debug, Serialize, Deserialize)]
52+
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
5353
pub enum {{enumName}} {
5454
{{#allowableValues}}
5555
{{#enumVars}}

modules/openapi-generator/src/main/resources/rust/request.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ impl ApiKey {
2424
}
2525
}
2626

27+
#[allow(dead_code)]
2728
pub(crate) enum Auth {
2829
None,
2930
ApiKey(ApiKey),

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use std::borrow::Borrow;
44

55
use reqwest;
66

7-
use super::{Error, configuration, urlencode};
7+
use super::{Error, configuration};
88

99
pub struct {{{classname}}}Client {
1010
configuration: Rc<configuration::Configuration>,
@@ -33,7 +33,7 @@ impl {{{classname}}} for {{{classname}}}Client {
3333
let configuration: &configuration::Configuration = self.configuration.borrow();
3434
let client = &configuration.client;
3535
36-
let uri_str = format!("{}{{{path}}}", configuration.base_path{{#pathParams}}, {{{baseName}}}={{#isString}}urlencode({{/isString}}{{{paramName}}}{{#isListContainer}}.join(",").as_ref(){{/isListContainer}}{{#isString}}){{/isString}}{{/pathParams}});
36+
let uri_str = format!("{}{{{path}}}", configuration.base_path{{#pathParams}}, {{{baseName}}}={{#isString}}crate::apis::urlencode({{/isString}}{{{paramName}}}{{#isListContainer}}.join(",").as_ref(){{/isListContainer}}{{#isString}}){{/isString}}{{/pathParams}});
3737
let mut req_builder = client.{{{httpMethod}}}(uri_str.as_str());
3838

3939
{{#queryParams}}

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@ pub fn urlencode<T: AsRef<str>>(s: T) -> String {
3030
::url::form_urlencoded::byte_serialize(s.as_ref().as_bytes()).collect()
3131
}
3232

33-
use super::models::*;
34-
3533
{{#apiInfo}}
3634
{{#apis}}
3735
mod {{{classFilename}}};

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ use std::rc::Rc;
33
use super::configuration::Configuration;
44

55
pub struct APIClient {
6-
configuration: Rc<Configuration>,
76
{{#apiInfo}}
87
{{#apis}}
98
{{#operations}}
@@ -22,7 +21,6 @@ impl APIClient {
2221
let rc = Rc::new(configuration);
2322
2423
APIClient {
25-
configuration: rc.clone(),
2624
{{#apiInfo}}
2725
{{#apis}}
2826
{{#operations}}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
4.0.3-SNAPSHOT

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ use std::rc::Rc;
33
use super::configuration::Configuration;
44

55
pub struct APIClient {
6-
configuration: Rc<Configuration>,
76
pet_api: Box<crate::apis::PetApi>,
87
store_api: Box<crate::apis::StoreApi>,
98
user_api: Box<crate::apis::UserApi>,
@@ -14,7 +13,6 @@ impl APIClient {
1413
let rc = Rc::new(configuration);
1514

1615
APIClient {
17-
configuration: rc.clone(),
1816
pet_api: Box::new(crate::apis::PetApiClient::new(rc.clone())),
1917
store_api: Box::new(crate::apis::StoreApiClient::new(rc.clone())),
2018
user_api: Box::new(crate::apis::UserApiClient::new(rc.clone())),
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
use std::rc::Rc;
2+
3+
use super::configuration::Configuration;
4+
5+
pub struct APIClient {
6+
pet_api: Box<crate::apis::PetApi>,
7+
store_api: Box<crate::apis::StoreApi>,
8+
user_api: Box<crate::apis::UserApi>,
9+
}
10+
11+
impl APIClient {
12+
pub fn new(configuration: Configuration) -> APIClient {
13+
let rc = Rc::new(configuration);
14+
15+
APIClient {
16+
pet_api: Box::new(crate::apis::PetApiClient::new(rc.clone())),
17+
store_api: Box::new(crate::apis::StoreApiClient::new(rc.clone())),
18+
user_api: Box::new(crate::apis::UserApiClient::new(rc.clone())),
19+
}
20+
}
21+
22+
pub fn pet_api(&self) -> &crate::apis::PetApi{
23+
self.pet_api.as_ref()
24+
}
25+
26+
pub fn store_api(&self) -> &crate::apis::StoreApi{
27+
self.store_api.as_ref()
28+
}
29+
30+
pub fn user_api(&self) -> &crate::apis::UserApi{
31+
self.user_api.as_ref()
32+
}
33+
34+
}

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@ pub fn urlencode<T: AsRef<str>>(s: T) -> String {
3030
::url::form_urlencoded::byte_serialize(s.as_ref().as_bytes()).collect()
3131
}
3232

33-
use super::models::*;
34-
3533
mod pet_api;
3634
pub use self::pet_api::{ PetApi, PetApiClient };
3735
mod store_api;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use std::borrow::Borrow;
1313

1414
use reqwest;
1515

16-
use super::{Error, configuration, urlencode};
16+
use super::{Error, configuration};
1717

1818
pub struct PetApiClient {
1919
configuration: Rc<configuration::Configuration>,

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use std::borrow::Borrow;
1313

1414
use reqwest;
1515

16-
use super::{Error, configuration, urlencode};
16+
use super::{Error, configuration};
1717

1818
pub struct StoreApiClient {
1919
configuration: Rc<configuration::Configuration>,
@@ -39,7 +39,7 @@ impl StoreApi for StoreApiClient {
3939
let configuration: &configuration::Configuration = self.configuration.borrow();
4040
let client = &configuration.client;
4141

42-
let uri_str = format!("{}/store/order/{orderId}", configuration.base_path, orderId=urlencode(order_id));
42+
let uri_str = format!("{}/store/order/{orderId}", configuration.base_path, orderId=crate::apis::urlencode(order_id));
4343
let mut req_builder = client.delete(uri_str.as_str());
4444

4545
if let Some(ref user_agent) = configuration.user_agent {

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use std::borrow::Borrow;
1313

1414
use reqwest;
1515

16-
use super::{Error, configuration, urlencode};
16+
use super::{Error, configuration};
1717

1818
pub struct UserApiClient {
1919
configuration: Rc<configuration::Configuration>,
@@ -100,7 +100,7 @@ impl UserApi for UserApiClient {
100100
let configuration: &configuration::Configuration = self.configuration.borrow();
101101
let client = &configuration.client;
102102

103-
let uri_str = format!("{}/user/{username}", configuration.base_path, username=urlencode(username));
103+
let uri_str = format!("{}/user/{username}", configuration.base_path, username=crate::apis::urlencode(username));
104104
let mut req_builder = client.delete(uri_str.as_str());
105105

106106
if let Some(ref user_agent) = configuration.user_agent {
@@ -118,7 +118,7 @@ impl UserApi for UserApiClient {
118118
let configuration: &configuration::Configuration = self.configuration.borrow();
119119
let client = &configuration.client;
120120

121-
let uri_str = format!("{}/user/{username}", configuration.base_path, username=urlencode(username));
121+
let uri_str = format!("{}/user/{username}", configuration.base_path, username=crate::apis::urlencode(username));
122122
let mut req_builder = client.get(uri_str.as_str());
123123

124124
if let Some(ref user_agent) = configuration.user_agent {
@@ -172,7 +172,7 @@ impl UserApi for UserApiClient {
172172
let configuration: &configuration::Configuration = self.configuration.borrow();
173173
let client = &configuration.client;
174174

175-
let uri_str = format!("{}/user/{username}", configuration.base_path, username=urlencode(username));
175+
let uri_str = format!("{}/user/{username}", configuration.base_path, username=crate::apis::urlencode(username));
176176
let mut req_builder = client.put(uri_str.as_str());
177177

178178
if let Some(ref user_agent) = configuration.user_agent {

samples/client/petstore/rust-reqwest/src/models/api_response.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
/// ApiResponse : Describes the result of uploading an image resource
1212
1313

14-
#[derive(Debug, Serialize, Deserialize)]
14+
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
1515
pub struct ApiResponse {
1616
#[serde(rename = "code", skip_serializing_if = "Option::is_none")]
1717
pub code: Option<i32>,

samples/client/petstore/rust-reqwest/src/models/category.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
/// Category : A category for a pet
1212
1313

14-
#[derive(Debug, Serialize, Deserialize)]
14+
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
1515
pub struct Category {
1616
#[serde(rename = "id", skip_serializing_if = "Option::is_none")]
1717
pub id: Option<i64>,

samples/client/petstore/rust-reqwest/src/models/order.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
/// Order : An order for a pets from the pet store
1212
1313

14-
#[derive(Debug, Serialize, Deserialize)]
14+
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
1515
pub struct Order {
1616
#[serde(rename = "id", skip_serializing_if = "Option::is_none")]
1717
pub id: Option<i64>,
@@ -23,7 +23,7 @@ pub struct Order {
2323
pub ship_date: Option<String>,
2424
/// Order Status
2525
#[serde(rename = "status", skip_serializing_if = "Option::is_none")]
26-
pub status: Option<String>,
26+
pub status: Option<Status>,
2727
#[serde(rename = "complete", skip_serializing_if = "Option::is_none")]
2828
pub complete: Option<bool>,
2929
}
@@ -43,7 +43,7 @@ impl Order {
4343
}
4444

4545
/// Order Status
46-
#[derive(Debug, Serialize, Deserialize)]
46+
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
4747
pub enum Status {
4848
#[serde(rename = "placed")]
4949
Placed,

samples/client/petstore/rust-reqwest/src/models/pet.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
/// Pet : A pet for sale in the pet store
1212
1313

14-
#[derive(Debug, Serialize, Deserialize)]
14+
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
1515
pub struct Pet {
1616
#[serde(rename = "id", skip_serializing_if = "Option::is_none")]
1717
pub id: Option<i64>,
@@ -25,7 +25,7 @@ pub struct Pet {
2525
pub tags: Option<Vec<crate::models::Tag>>,
2626
/// pet status in the store
2727
#[serde(rename = "status", skip_serializing_if = "Option::is_none")]
28-
pub status: Option<String>,
28+
pub status: Option<Status>,
2929
}
3030

3131
impl Pet {
@@ -43,7 +43,7 @@ impl Pet {
4343
}
4444

4545
/// pet status in the store
46-
#[derive(Debug, Serialize, Deserialize)]
46+
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
4747
pub enum Status {
4848
#[serde(rename = "available")]
4949
Available,

samples/client/petstore/rust-reqwest/src/models/tag.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
/// Tag : A tag for a pet
1212
1313

14-
#[derive(Debug, Serialize, Deserialize)]
14+
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
1515
pub struct Tag {
1616
#[serde(rename = "id", skip_serializing_if = "Option::is_none")]
1717
pub id: Option<i64>,

samples/client/petstore/rust-reqwest/src/models/user.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
/// User : A User who is purchasing from the pet store
1212
1313

14-
#[derive(Debug, Serialize, Deserialize)]
14+
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
1515
pub struct User {
1616
#[serde(rename = "id", skip_serializing_if = "Option::is_none")]
1717
pub id: Option<i64>,
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
4.0.3-SNAPSHOT

samples/client/petstore/rust/src/apis/client.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,17 @@ use std::rc::Rc;
33
use hyper;
44
use super::configuration::Configuration;
55

6-
pub struct APIClient<C: hyper::client::Connect> {
7-
configuration: Rc<Configuration<C>>,
6+
pub struct APIClient {
87
pet_api: Box<crate::apis::PetApi>,
98
store_api: Box<crate::apis::StoreApi>,
109
user_api: Box<crate::apis::UserApi>,
1110
}
1211

13-
impl<C: hyper::client::Connect> APIClient<C> {
14-
pub fn new(configuration: Configuration<C>) -> APIClient<C> {
12+
impl APIClient {
13+
pub fn new<C: hyper::client::Connect>(configuration: Configuration<C>) -> APIClient {
1514
let rc = Rc::new(configuration);
1615

1716
APIClient {
18-
configuration: rc.clone(),
1917
pet_api: Box::new(crate::apis::PetApiClient::new(rc.clone())),
2018
store_api: Box::new(crate::apis::StoreApiClient::new(rc.clone())),
2119
user_api: Box::new(crate::apis::UserApiClient::new(rc.clone())),

0 commit comments

Comments
 (0)