diff --git a/modules/openapi-generator/src/main/resources/rust/reqwest/api.mustache b/modules/openapi-generator/src/main/resources/rust/reqwest/api.mustache index 977f0b6edbcf..884a090354d5 100644 --- a/modules/openapi-generator/src/main/resources/rust/reqwest/api.mustache +++ b/modules/openapi-generator/src/main/resources/rust/reqwest/api.mustache @@ -80,7 +80,7 @@ pub enum {{{operationIdCamelCase}}}Error { /// {{{.}}} {{/notes}} {{#vendorExtensions.x-group-parameters}} -pub {{#supportAsync}}async {{/supportAsync}}fn {{{operationId}}}(configuration: &configuration::Configuration{{#allParams}}{{#-first}}, params: {{{operationIdCamelCase}}}Params{{/-first}}{{/allParams}}) -> Result<{{#supportMultipleResponses}}ResponseContent<{{{operationIdCamelCase}}}Success>{{/supportMultipleResponses}}{{^supportMultipleResponses}}{{^returnType}}(){{/returnType}}{{#returnType}}{{{returnType}}}{{/returnType}}{{/supportMultipleResponses}}, Error<{{{operationIdCamelCase}}}Error>> { +pub {{#supportAsync}}async {{/supportAsync}}fn {{{operationId}}}(configuration: &configuration::Configuration{{#allParams}}{{#-first}}, params: {{{operationIdCamelCase}}}Params{{/-first}}{{/allParams}}) -> Result<{{#supportMultipleResponses}}ResponseContent<{{{operationIdCamelCase}}}Success>{{/supportMultipleResponses}}{{^supportMultipleResponses}}{{^returnType}}(){{/returnType}}{{#returnType}}{{{returnType}}}{{/returnType}}{{/supportMultipleResponses}}, Error<{{{operationIdCamelCase}}}Error>> { // unbox the parameters {{#allParams}} let {{paramName}} = params.{{paramName}}; @@ -111,12 +111,13 @@ pub {{#supportAsync}}async {{/supportAsync}}fn {{{operationId}}}(configuration: {{#isApiKey}} {{#isKeyInQuery}} if let Some(ref local_var_apikey) = configuration.api_key { - let local_var_key = local_var_apikey.key.clone(); - let local_var_value = match local_var_apikey.prefix { - Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key), - None => local_var_key, - }; - local_var_req_builder = local_var_req_builder.query(&[("{{{keyParamName}}}", local_var_value)]); + if let Some(local_var_key) = local_var_apikey.get_key("{{{keyParamName}}}") { + let local_var_value = match local_var_apikey.get_prefix("{{{keyParamName}}}") { + Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key), + None => local_var_key, + }; + local_var_req_builder = local_var_req_builder.query(&[("{{{keyParamName}}}", local_var_value)]); + } } {{/isKeyInQuery}} {{/isApiKey}} @@ -150,12 +151,13 @@ pub {{#supportAsync}}async {{/supportAsync}}fn {{{operationId}}}(configuration: {{#isApiKey}} {{#isKeyInHeader}} if let Some(ref local_var_apikey) = configuration.api_key { - let local_var_key = local_var_apikey.key.clone(); - let local_var_value = match local_var_apikey.prefix { - Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key), - None => local_var_key, - }; - local_var_req_builder = local_var_req_builder.header("{{{keyParamName}}}", local_var_value); + if let Some(local_var_key) = local_var_apikey.get_key("{{{keyParamName}}}") { + let local_var_value = match local_var_apikey.get_prefix("{{{keyParamName}}}") { + Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key), + None => local_var_key, + }; + local_var_req_builder = local_var_req_builder.header("{{{keyParamName}}}", local_var_value); + } }; {{/isKeyInHeader}} {{/isApiKey}} diff --git a/modules/openapi-generator/src/main/resources/rust/reqwest/configuration.mustache b/modules/openapi-generator/src/main/resources/rust/reqwest/configuration.mustache index 2c9b243a6d33..80d9fe45a3b2 100644 --- a/modules/openapi-generator/src/main/resources/rust/reqwest/configuration.mustache +++ b/modules/openapi-generator/src/main/resources/rust/reqwest/configuration.mustache @@ -2,31 +2,49 @@ use reqwest; -pub struct Configuration { +pub struct Configuration { pub base_path: String, pub user_agent: Option, pub client: reqwest::Client, pub basic_auth: Option, pub oauth_access_token: Option, pub bearer_access_token: Option, - pub api_key: Option, + pub api_key: Option, // TODO: take an oauth2 token source, similar to the go one } pub type BasicAuth = (String, Option); -pub struct ApiKey { - pub prefix: Option, - pub key: String, +pub trait ApiKey { + fn get_prefix(&self, name: &str) -> Option, + fn get_key(&self, name: &str) -> Option, } -impl Configuration { +impl ApiKey for String { + fn get_prefix(&self, _: &str) -> Option { + None + } + fn get_key(&self, _: &str) -> Option { + self.cloned() + } +} + +impl ApiKey for std::collection::HashMap { + fn get_prefix(&self, _: &str) -> Option { + None + } + fn get_key(&self, name: &str) -> Option { + self.get(name).cloned() + } +} + +impl Configuration { pub fn new() -> Configuration { Configuration::default() } } -impl Default for Configuration { +impl Default for Configuration { fn default() -> Self { Configuration { base_path: "{{{basePath}}}".to_owned(), diff --git a/samples/client/petstore/rust/reqwest/petstore-async/src/apis/configuration.rs b/samples/client/petstore/rust/reqwest/petstore-async/src/apis/configuration.rs index 4194f7a52d1d..a4a16171bdfd 100644 --- a/samples/client/petstore/rust/reqwest/petstore-async/src/apis/configuration.rs +++ b/samples/client/petstore/rust/reqwest/petstore-async/src/apis/configuration.rs @@ -11,31 +11,49 @@ use reqwest; -pub struct Configuration { +pub struct Configuration { pub base_path: String, pub user_agent: Option, pub client: reqwest::Client, pub basic_auth: Option, pub oauth_access_token: Option, pub bearer_access_token: Option, - pub api_key: Option, + pub api_key: Option, // TODO: take an oauth2 token source, similar to the go one } pub type BasicAuth = (String, Option); -pub struct ApiKey { - pub prefix: Option, - pub key: String, +pub trait ApiKey { + fn get_prefix(&self, name: &str) -> Option, + fn get_key(&self, name: &str) -> Option, } -impl Configuration { +impl ApiKey for String { + fn get_prefix(&self, _: &str) -> Option { + None + } + fn get_key(&self, _: &str) -> Option { + self.cloned() + } +} + +impl ApiKey for std::collection::HashMap { + fn get_prefix(&self, _: &str) -> Option { + None + } + fn get_key(&self, name: &str) -> Option { + self.get(name).cloned() + } +} + +impl Configuration { pub fn new() -> Configuration { Configuration::default() } } -impl Default for Configuration { +impl Default for Configuration { fn default() -> Self { Configuration { base_path: "http://petstore.swagger.io/v2".to_owned(), diff --git a/samples/client/petstore/rust/reqwest/petstore-async/src/apis/pet_api.rs b/samples/client/petstore/rust/reqwest/petstore-async/src/apis/pet_api.rs index e4162a33129b..a15061ab3b4e 100644 --- a/samples/client/petstore/rust/reqwest/petstore-async/src/apis/pet_api.rs +++ b/samples/client/petstore/rust/reqwest/petstore-async/src/apis/pet_api.rs @@ -207,7 +207,7 @@ pub enum UploadFileError { } -pub async fn add_pet(configuration: &configuration::Configuration, params: AddPetParams) -> Result, Error> { +pub async fn add_pet(configuration: &configuration::Configuration, params: AddPetParams) -> Result, Error> { // unbox the parameters let body = params.body; @@ -242,7 +242,7 @@ pub async fn add_pet(configuration: &configuration::Configuration, params: AddPe } } -pub async fn delete_pet(configuration: &configuration::Configuration, params: DeletePetParams) -> Result, Error> { +pub async fn delete_pet(configuration: &configuration::Configuration, params: DeletePetParams) -> Result, Error> { // unbox the parameters let pet_id = params.pet_id; let api_key = params.api_key; @@ -281,7 +281,7 @@ pub async fn delete_pet(configuration: &configuration::Configuration, params: De } /// Multiple status values can be provided with comma separated strings -pub async fn find_pets_by_status(configuration: &configuration::Configuration, params: FindPetsByStatusParams) -> Result, Error> { +pub async fn find_pets_by_status(configuration: &configuration::Configuration, params: FindPetsByStatusParams) -> Result, Error> { // unbox the parameters let status = params.status; @@ -317,7 +317,7 @@ pub async fn find_pets_by_status(configuration: &configuration::Configuration, p } /// Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. -pub async fn find_pets_by_tags(configuration: &configuration::Configuration, params: FindPetsByTagsParams) -> Result, Error> { +pub async fn find_pets_by_tags(configuration: &configuration::Configuration, params: FindPetsByTagsParams) -> Result, Error> { // unbox the parameters let tags = params.tags; @@ -353,7 +353,7 @@ pub async fn find_pets_by_tags(configuration: &configuration::Configuration, par } /// Returns a single pet -pub async fn get_pet_by_id(configuration: &configuration::Configuration, params: GetPetByIdParams) -> Result, Error> { +pub async fn get_pet_by_id(configuration: &configuration::Configuration, params: GetPetByIdParams) -> Result, Error> { // unbox the parameters let pet_id = params.pet_id; @@ -367,12 +367,13 @@ pub async fn get_pet_by_id(configuration: &configuration::Configuration, params: local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); } if let Some(ref local_var_apikey) = configuration.api_key { - let local_var_key = local_var_apikey.key.clone(); - let local_var_value = match local_var_apikey.prefix { - Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key), - None => local_var_key, - }; - local_var_req_builder = local_var_req_builder.header("api_key", local_var_value); + if let Some(local_var_key) = local_var_apikey.get_key("api_key") { + let local_var_value = match local_var_apikey.get_prefix("api_key") { + Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key), + None => local_var_key, + }; + local_var_req_builder = local_var_req_builder.header("api_key", local_var_value); + } }; let local_var_req = local_var_req_builder.build()?; @@ -392,7 +393,7 @@ pub async fn get_pet_by_id(configuration: &configuration::Configuration, params: } } -pub async fn update_pet(configuration: &configuration::Configuration, params: UpdatePetParams) -> Result, Error> { +pub async fn update_pet(configuration: &configuration::Configuration, params: UpdatePetParams) -> Result, Error> { // unbox the parameters let body = params.body; @@ -427,7 +428,7 @@ pub async fn update_pet(configuration: &configuration::Configuration, params: Up } } -pub async fn update_pet_with_form(configuration: &configuration::Configuration, params: UpdatePetWithFormParams) -> Result, Error> { +pub async fn update_pet_with_form(configuration: &configuration::Configuration, params: UpdatePetWithFormParams) -> Result, Error> { // unbox the parameters let pet_id = params.pet_id; let name = params.name; @@ -471,7 +472,7 @@ pub async fn update_pet_with_form(configuration: &configuration::Configuration, } } -pub async fn upload_file(configuration: &configuration::Configuration, params: UploadFileParams) -> Result, Error> { +pub async fn upload_file(configuration: &configuration::Configuration, params: UploadFileParams) -> Result, Error> { // unbox the parameters let pet_id = params.pet_id; let additional_metadata = params.additional_metadata; diff --git a/samples/client/petstore/rust/reqwest/petstore-async/src/apis/store_api.rs b/samples/client/petstore/rust/reqwest/petstore-async/src/apis/store_api.rs index 21647faa062f..a3a0ffc6e39e 100644 --- a/samples/client/petstore/rust/reqwest/petstore-async/src/apis/store_api.rs +++ b/samples/client/petstore/rust/reqwest/petstore-async/src/apis/store_api.rs @@ -102,7 +102,7 @@ pub enum PlaceOrderError { /// For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors -pub async fn delete_order(configuration: &configuration::Configuration, params: DeleteOrderParams) -> Result, Error> { +pub async fn delete_order(configuration: &configuration::Configuration, params: DeleteOrderParams) -> Result, Error> { // unbox the parameters let order_id = params.order_id; @@ -134,7 +134,7 @@ pub async fn delete_order(configuration: &configuration::Configuration, params: } /// Returns a map of status codes to quantities -pub async fn get_inventory(configuration: &configuration::Configuration) -> Result, Error> { +pub async fn get_inventory(configuration: &configuration::Configuration) -> Result, Error> { // unbox the parameters @@ -147,12 +147,13 @@ pub async fn get_inventory(configuration: &configuration::Configuration) -> Resu local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); } if let Some(ref local_var_apikey) = configuration.api_key { - let local_var_key = local_var_apikey.key.clone(); - let local_var_value = match local_var_apikey.prefix { - Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key), - None => local_var_key, - }; - local_var_req_builder = local_var_req_builder.header("api_key", local_var_value); + if let Some(local_var_key) = local_var_apikey.get_key("api_key") { + let local_var_value = match local_var_apikey.get_prefix("api_key") { + Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key), + None => local_var_key, + }; + local_var_req_builder = local_var_req_builder.header("api_key", local_var_value); + } }; let local_var_req = local_var_req_builder.build()?; @@ -173,7 +174,7 @@ pub async fn get_inventory(configuration: &configuration::Configuration) -> Resu } /// For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions -pub async fn get_order_by_id(configuration: &configuration::Configuration, params: GetOrderByIdParams) -> Result, Error> { +pub async fn get_order_by_id(configuration: &configuration::Configuration, params: GetOrderByIdParams) -> Result, Error> { // unbox the parameters let order_id = params.order_id; @@ -204,7 +205,7 @@ pub async fn get_order_by_id(configuration: &configuration::Configuration, param } } -pub async fn place_order(configuration: &configuration::Configuration, params: PlaceOrderParams) -> Result, Error> { +pub async fn place_order(configuration: &configuration::Configuration, params: PlaceOrderParams) -> Result, Error> { // unbox the parameters let body = params.body; diff --git a/samples/client/petstore/rust/reqwest/petstore-async/src/apis/user_api.rs b/samples/client/petstore/rust/reqwest/petstore-async/src/apis/user_api.rs index a791bfbc9bb4..c53fc37d4891 100644 --- a/samples/client/petstore/rust/reqwest/petstore-async/src/apis/user_api.rs +++ b/samples/client/petstore/rust/reqwest/petstore-async/src/apis/user_api.rs @@ -195,7 +195,7 @@ pub enum UpdateUserError { /// This can only be done by the logged in user. -pub async fn create_user(configuration: &configuration::Configuration, params: CreateUserParams) -> Result, Error> { +pub async fn create_user(configuration: &configuration::Configuration, params: CreateUserParams) -> Result, Error> { // unbox the parameters let body = params.body; @@ -227,7 +227,7 @@ pub async fn create_user(configuration: &configuration::Configuration, params: C } } -pub async fn create_users_with_array_input(configuration: &configuration::Configuration, params: CreateUsersWithArrayInputParams) -> Result, Error> { +pub async fn create_users_with_array_input(configuration: &configuration::Configuration, params: CreateUsersWithArrayInputParams) -> Result, Error> { // unbox the parameters let body = params.body; @@ -259,7 +259,7 @@ pub async fn create_users_with_array_input(configuration: &configuration::Config } } -pub async fn create_users_with_list_input(configuration: &configuration::Configuration, params: CreateUsersWithListInputParams) -> Result, Error> { +pub async fn create_users_with_list_input(configuration: &configuration::Configuration, params: CreateUsersWithListInputParams) -> Result, Error> { // unbox the parameters let body = params.body; @@ -292,7 +292,7 @@ pub async fn create_users_with_list_input(configuration: &configuration::Configu } /// This can only be done by the logged in user. -pub async fn delete_user(configuration: &configuration::Configuration, params: DeleteUserParams) -> Result, Error> { +pub async fn delete_user(configuration: &configuration::Configuration, params: DeleteUserParams) -> Result, Error> { // unbox the parameters let username = params.username; @@ -323,7 +323,7 @@ pub async fn delete_user(configuration: &configuration::Configuration, params: D } } -pub async fn get_user_by_name(configuration: &configuration::Configuration, params: GetUserByNameParams) -> Result, Error> { +pub async fn get_user_by_name(configuration: &configuration::Configuration, params: GetUserByNameParams) -> Result, Error> { // unbox the parameters let username = params.username; @@ -354,7 +354,7 @@ pub async fn get_user_by_name(configuration: &configuration::Configuration, para } } -pub async fn login_user(configuration: &configuration::Configuration, params: LoginUserParams) -> Result, Error> { +pub async fn login_user(configuration: &configuration::Configuration, params: LoginUserParams) -> Result, Error> { // unbox the parameters let username = params.username; let password = params.password; @@ -388,7 +388,7 @@ pub async fn login_user(configuration: &configuration::Configuration, params: Lo } } -pub async fn logout_user(configuration: &configuration::Configuration) -> Result, Error> { +pub async fn logout_user(configuration: &configuration::Configuration) -> Result, Error> { // unbox the parameters @@ -419,7 +419,7 @@ pub async fn logout_user(configuration: &configuration::Configuration) -> Result } /// This can only be done by the logged in user. -pub async fn update_user(configuration: &configuration::Configuration, params: UpdateUserParams) -> Result, Error> { +pub async fn update_user(configuration: &configuration::Configuration, params: UpdateUserParams) -> Result, Error> { // unbox the parameters let username = params.username; let body = params.body; diff --git a/samples/client/petstore/rust/reqwest/petstore/src/apis/configuration.rs b/samples/client/petstore/rust/reqwest/petstore/src/apis/configuration.rs index 4194f7a52d1d..a4a16171bdfd 100644 --- a/samples/client/petstore/rust/reqwest/petstore/src/apis/configuration.rs +++ b/samples/client/petstore/rust/reqwest/petstore/src/apis/configuration.rs @@ -11,31 +11,49 @@ use reqwest; -pub struct Configuration { +pub struct Configuration { pub base_path: String, pub user_agent: Option, pub client: reqwest::Client, pub basic_auth: Option, pub oauth_access_token: Option, pub bearer_access_token: Option, - pub api_key: Option, + pub api_key: Option, // TODO: take an oauth2 token source, similar to the go one } pub type BasicAuth = (String, Option); -pub struct ApiKey { - pub prefix: Option, - pub key: String, +pub trait ApiKey { + fn get_prefix(&self, name: &str) -> Option, + fn get_key(&self, name: &str) -> Option, } -impl Configuration { +impl ApiKey for String { + fn get_prefix(&self, _: &str) -> Option { + None + } + fn get_key(&self, _: &str) -> Option { + self.cloned() + } +} + +impl ApiKey for std::collection::HashMap { + fn get_prefix(&self, _: &str) -> Option { + None + } + fn get_key(&self, name: &str) -> Option { + self.get(name).cloned() + } +} + +impl Configuration { pub fn new() -> Configuration { Configuration::default() } } -impl Default for Configuration { +impl Default for Configuration { fn default() -> Self { Configuration { base_path: "http://petstore.swagger.io/v2".to_owned(), diff --git a/samples/client/petstore/rust/reqwest/petstore/src/apis/pet_api.rs b/samples/client/petstore/rust/reqwest/petstore/src/apis/pet_api.rs index 47cf47f1d59b..43d792790500 100644 --- a/samples/client/petstore/rust/reqwest/petstore/src/apis/pet_api.rs +++ b/samples/client/petstore/rust/reqwest/petstore/src/apis/pet_api.rs @@ -218,12 +218,13 @@ pub fn get_pet_by_id(configuration: &configuration::Configuration, pet_id: i64) local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); } if let Some(ref local_var_apikey) = configuration.api_key { - let local_var_key = local_var_apikey.key.clone(); - let local_var_value = match local_var_apikey.prefix { - Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key), - None => local_var_key, - }; - local_var_req_builder = local_var_req_builder.header("api_key", local_var_value); + if let Some(local_var_key) = local_var_apikey.get_key("api_key") { + let local_var_value = match local_var_apikey.get_prefix("api_key") { + Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key), + None => local_var_key, + }; + local_var_req_builder = local_var_req_builder.header("api_key", local_var_value); + } }; let local_var_req = local_var_req_builder.build()?; diff --git a/samples/client/petstore/rust/reqwest/petstore/src/apis/store_api.rs b/samples/client/petstore/rust/reqwest/petstore/src/apis/store_api.rs index 898599f9b2fc..f99d4334ec47 100644 --- a/samples/client/petstore/rust/reqwest/petstore/src/apis/store_api.rs +++ b/samples/client/petstore/rust/reqwest/petstore/src/apis/store_api.rs @@ -88,12 +88,13 @@ pub fn get_inventory(configuration: &configuration::Configuration, ) -> Result<: local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); } if let Some(ref local_var_apikey) = configuration.api_key { - let local_var_key = local_var_apikey.key.clone(); - let local_var_value = match local_var_apikey.prefix { - Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key), - None => local_var_key, - }; - local_var_req_builder = local_var_req_builder.header("api_key", local_var_value); + if let Some(local_var_key) = local_var_apikey.get_key("api_key") { + let local_var_value = match local_var_apikey.get_prefix("api_key") { + Some(ref local_var_prefix) => format!("{} {}", local_var_prefix, local_var_key), + None => local_var_key, + }; + local_var_req_builder = local_var_req_builder.header("api_key", local_var_value); + } }; let local_var_req = local_var_req_builder.build()?;