Skip to content

Commit 1860efa

Browse files
[Rust] fix: add location prefix to prevent parameter name collisions (#21611)
* [Rust] fix: add location prefix to prevent parameter name collisions when escaping parameter names * chore: update samples * [Rust] fix: do not use locationSuffix if useSingleRequestParameter feature is enabled
1 parent bfc989c commit 1860efa

File tree

22 files changed

+254
-238
lines changed

22 files changed

+254
-238
lines changed

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustClientCodegen.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -639,13 +639,29 @@ public void postProcessParameter(CodegenParameter parameter) {
639639
super.postProcessParameter(parameter);
640640
// in order to avoid name conflicts, we map parameters inside the functions
641641
String inFunctionIdentifier = "";
642+
String locationSuffix = "";
643+
644+
// Determine parameter location using the boolean flags in case of parameters with the same name but in different locations
645+
if (parameter.isPathParam) {
646+
locationSuffix = "path_";
647+
} else if (parameter.isQueryParam) {
648+
locationSuffix = "query_";
649+
} else if (parameter.isHeaderParam) {
650+
locationSuffix = "header_";
651+
} else if (parameter.isBodyParam) {
652+
locationSuffix = "body_";
653+
} else if (parameter.isCookieParam) {
654+
locationSuffix = "cookie_";
655+
} else if (parameter.isFormParam) {
656+
locationSuffix = "form_";
657+
}
642658
if (this.useSingleRequestParameter) {
643659
inFunctionIdentifier = "params." + parameter.paramName;
644660
} else {
645661
if (parameter.paramName.startsWith("r#")) {
646-
inFunctionIdentifier = "p_" + parameter.paramName.substring(2);
662+
inFunctionIdentifier = "p_" + locationSuffix + parameter.paramName.substring(2);
647663
} else {
648-
inFunctionIdentifier = "p_" + parameter.paramName;
664+
inFunctionIdentifier = "p_" + locationSuffix + parameter.paramName;
649665
}
650666
}
651667
if (!parameter.vendorExtensions.containsKey(this.VENDOR_EXTENSION_PARAM_IDENTIFIER)) { // allow to overwrite this value

samples/client/others/rust/reqwest/api-with-ref-param/src/apis/default_api.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ pub enum DemoColorGetError {
2525

2626
pub async fn demo_color_get(configuration: &configuration::Configuration, color: models::Color) -> Result<(), Error<DemoColorGetError>> {
2727
// add a prefix to parameters to efficiently prevent name collisions
28-
let p_color = color;
28+
let p_path_color = color;
2929

30-
let uri_str = format!("{}/demo/{color}", configuration.base_path, color=p_color.to_string());
30+
let uri_str = format!("{}/demo/{color}", configuration.base_path, color=p_path_color.to_string());
3131
let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
3232

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

samples/client/others/rust/reqwest/composed-oneof/src/apis/default_api.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,15 @@ pub enum GetStateError {
3232

3333
pub fn create_state(configuration: &configuration::Configuration, create_state_request: models::CreateStateRequest) -> Result<(), Error<CreateStateError>> {
3434
// add a prefix to parameters to efficiently prevent name collisions
35-
let p_create_state_request = create_state_request;
35+
let p_body_create_state_request = create_state_request;
3636

3737
let uri_str = format!("{}/state", configuration.base_path);
3838
let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
3939

4040
if let Some(ref user_agent) = configuration.user_agent {
4141
req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
4242
}
43-
req_builder = req_builder.json(&p_create_state_request);
43+
req_builder = req_builder.json(&p_body_create_state_request);
4444

4545
let req = req_builder.build()?;
4646
let resp = configuration.client.execute(req)?;

samples/client/others/rust/reqwest/oneOf-array-map/src/apis/default_api.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,15 +66,15 @@ pub fn root_get(configuration: &configuration::Configuration, ) -> Result<models
6666

6767
pub fn test(configuration: &configuration::Configuration, body: Option<serde_json::Value>) -> Result<(), Error<TestError>> {
6868
// add a prefix to parameters to efficiently prevent name collisions
69-
let p_body = body;
69+
let p_body_body = body;
7070

7171
let uri_str = format!("{}/", configuration.base_path);
7272
let mut req_builder = configuration.client.request(reqwest::Method::PUT, &uri_str);
7373

7474
if let Some(ref user_agent) = configuration.user_agent {
7575
req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
7676
}
77-
req_builder = req_builder.json(&p_body);
77+
req_builder = req_builder.json(&p_body_body);
7878

7979
let req = req_builder.build()?;
8080
let resp = configuration.client.execute(req)?;

samples/client/others/rust/reqwest/oneOf/src/apis/bar_api.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,15 @@ pub enum CreateBarError {
2525

2626
pub fn create_bar(configuration: &configuration::Configuration, bar_create: models::BarCreate) -> Result<models::Bar, Error<CreateBarError>> {
2727
// add a prefix to parameters to efficiently prevent name collisions
28-
let p_bar_create = bar_create;
28+
let p_body_bar_create = bar_create;
2929

3030
let uri_str = format!("{}/bar", configuration.base_path);
3131
let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
3232

3333
if let Some(ref user_agent) = configuration.user_agent {
3434
req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
3535
}
36-
req_builder = req_builder.json(&p_bar_create);
36+
req_builder = req_builder.json(&p_body_bar_create);
3737

3838
let req = req_builder.build()?;
3939
let resp = configuration.client.execute(req)?;

samples/client/others/rust/reqwest/oneOf/src/apis/foo_api.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,15 @@ pub enum GetAllFoosError {
3232

3333
pub fn create_foo(configuration: &configuration::Configuration, foo: Option<models::Foo>) -> Result<models::FooRefOrValue, Error<CreateFooError>> {
3434
// add a prefix to parameters to efficiently prevent name collisions
35-
let p_foo = foo;
35+
let p_body_foo = foo;
3636

3737
let uri_str = format!("{}/foo", configuration.base_path);
3838
let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
3939

4040
if let Some(ref user_agent) = configuration.user_agent {
4141
req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
4242
}
43-
req_builder = req_builder.json(&p_foo);
43+
req_builder = req_builder.json(&p_body_foo);
4444

4545
let req = req_builder.build()?;
4646
let resp = configuration.client.execute(req)?;

samples/client/petstore/rust/reqwest/name-mapping/src/apis/fake_api.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,23 +25,23 @@ pub enum GetParameterNameMappingError {
2525

2626
pub fn get_parameter_name_mapping(configuration: &configuration::Configuration, underscore_type: i64, r#type: &str, type_with_underscore: &str, dash_type: &str, http_debug_option: &str) -> Result<(), Error<GetParameterNameMappingError>> {
2727
// add a prefix to parameters to efficiently prevent name collisions
28-
let p_underscore_type = underscore_type;
29-
let p_type = r#type;
30-
let p_type_with_underscore = type_with_underscore;
31-
let p_dash_type = dash_type;
32-
let p_http_debug_option = http_debug_option;
28+
let p_header_underscore_type = underscore_type;
29+
let p_query_type = r#type;
30+
let p_header_type_with_underscore = type_with_underscore;
31+
let p_header_dash_type = dash_type;
32+
let p_query_http_debug_option = http_debug_option;
3333

3434
let uri_str = format!("{}/fake/parameter-name-mapping", configuration.base_path);
3535
let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
3636

37-
req_builder = req_builder.query(&[("type", &p_type.to_string())]);
38-
req_builder = req_builder.query(&[("http_debug_option", &p_http_debug_option.to_string())]);
37+
req_builder = req_builder.query(&[("type", &p_query_type.to_string())]);
38+
req_builder = req_builder.query(&[("http_debug_option", &p_query_http_debug_option.to_string())]);
3939
if let Some(ref user_agent) = configuration.user_agent {
4040
req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
4141
}
42-
req_builder = req_builder.header("_type", p_underscore_type.to_string());
43-
req_builder = req_builder.header("type_", p_type_with_underscore.to_string());
44-
req_builder = req_builder.header("-type", p_dash_type.to_string());
42+
req_builder = req_builder.header("_type", p_header_underscore_type.to_string());
43+
req_builder = req_builder.header("type_", p_header_type_with_underscore.to_string());
44+
req_builder = req_builder.header("-type", p_header_dash_type.to_string());
4545

4646
let req = req_builder.build()?;
4747
let resp = configuration.client.execute(req)?;

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,27 +28,27 @@ pub enum TestNullableRequiredParamError {
2828
///
2929
pub fn test_nullable_required_param(configuration: &configuration::Configuration, user_name: &str, dummy_required_nullable_param: Option<&str>, any_type: &str, uppercase: Option<&str>, content: Option<&str>) -> Result<(), Error<TestNullableRequiredParamError>> {
3030
// add a prefix to parameters to efficiently prevent name collisions
31-
let p_user_name = user_name;
32-
let p_dummy_required_nullable_param = dummy_required_nullable_param;
33-
let p_any_type = any_type;
34-
let p_uppercase = uppercase;
35-
let p_content = content;
31+
let p_path_user_name = user_name;
32+
let p_header_dummy_required_nullable_param = dummy_required_nullable_param;
33+
let p_query_any_type = any_type;
34+
let p_header_uppercase = uppercase;
35+
let p_query_content = content;
3636

37-
let uri_str = format!("{}/fake/user/{user_name}", configuration.base_path, user_name=crate::apis::urlencode(p_user_name));
37+
let uri_str = format!("{}/fake/user/{user_name}", configuration.base_path, user_name=crate::apis::urlencode(p_path_user_name));
3838
let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
3939

40-
if let Some(ref param_value) = p_content {
40+
if let Some(ref param_value) = p_query_content {
4141
req_builder = req_builder.query(&[("content", &param_value.to_string())]);
4242
}
43-
req_builder = req_builder.query(&[("anyType", &p_any_type.to_string())]);
43+
req_builder = req_builder.query(&[("anyType", &p_query_any_type.to_string())]);
4444
if let Some(ref user_agent) = configuration.user_agent {
4545
req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
4646
}
47-
match p_dummy_required_nullable_param {
47+
match p_header_dummy_required_nullable_param {
4848
Some(param_value) => { req_builder = req_builder.header("dummy_required_nullable_param", param_value.to_string()); },
4949
None => { req_builder = req_builder.header("dummy_required_nullable_param", ""); },
5050
}
51-
if let Some(param_value) = p_uppercase {
51+
if let Some(param_value) = p_header_uppercase {
5252
req_builder = req_builder.header("UPPERCASE", param_value.to_string());
5353
}
5454

0 commit comments

Comments
 (0)