diff --git a/bin/configs/scala-sttp.yaml b/bin/configs/scala-sttp.yaml index abcd83a23b1..2ba1bea51b2 100644 --- a/bin/configs/scala-sttp.yaml +++ b/bin/configs/scala-sttp.yaml @@ -2,5 +2,13 @@ generatorName: scala-sttp outputDir: samples/client/petstore/scala-sttp inputSpec: modules/openapi-generator/src/test/resources/3_0/scala/petstore.yaml templateDir: modules/openapi-generator/src/main/resources/scala-sttp +nameMappings: + _type: "`underscoreType`" + type_: "`typeWithUnderscore`" + http_debug_operation: "`httpDebugOperation`" +parameterNameMappings: + _type: underscoreType + type_: typeWithUnderscore + http_debug_operation: httpDebugOperation additionalProperties: artifactId: scala-sttp-petstore diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index ea019917d27..a412b96eb70 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -1617,6 +1617,11 @@ public class DefaultCodegen implements CodegenConfig { * @return the sanitized variable name */ public String toVarName(final String name) { + // obtain the name from nameMapping directly if provided + if (nameMapping.containsKey(name)) { + return nameMapping.get(name); + } + if (reservedWords.contains(name)) { return escapeReservedWord(name); } else if (name.chars().anyMatch(character -> specialCharReplacements.containsKey(String.valueOf((char) character)))) { @@ -1634,6 +1639,11 @@ public class DefaultCodegen implements CodegenConfig { */ @Override public String toParamName(String name) { + // obtain the name from parameterNameMapping directly if provided + if (parameterNameMapping.containsKey(name)) { + return parameterNameMapping.get(name); + } + name = removeNonNameElementToCamelCase(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. if (reservedWords.contains(name)) { return escapeReservedWord(name); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java index 0764c47c7c7..d5bf542c0b8 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractScalaCodegen.java @@ -276,6 +276,11 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen { @Override public String toVarName(String name) { + // obtain the name from nameMapping directly if provided + if (nameMapping.containsKey(name)) { + return nameMapping.get(name); + } + String varName = sanitizeName(name); if ("_".equals(varName)) { diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java index b6c05191414..c1fa721d5f5 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java @@ -159,15 +159,15 @@ public class ScalaAkkaClientCodegen extends AbstractScalaCodegen implements Code if (additionalProperties.containsKey("mainPackage")) { setMainPackage((String) additionalProperties.get("mainPackage")); additionalProperties.replace("configKeyPath", this.configKeyPath); - if (!additionalProperties.containsKey(CodegenConstants.API_PACKAGE)){ + if (!additionalProperties.containsKey(CodegenConstants.API_PACKAGE)) { apiPackage = mainPackage + ".api"; additionalProperties.put(CodegenConstants.API_PACKAGE, apiPackage); } - if (!additionalProperties.containsKey(CodegenConstants.MODEL_PACKAGE)){ + if (!additionalProperties.containsKey(CodegenConstants.MODEL_PACKAGE)) { modelPackage = mainPackage + ".model"; additionalProperties.put(CodegenConstants.MODEL_PACKAGE, modelPackage); } - if (!additionalProperties.containsKey(CodegenConstants.INVOKER_PACKAGE)){ + if (!additionalProperties.containsKey(CodegenConstants.INVOKER_PACKAGE)) { invokerPackage = mainPackage + ".core"; } } @@ -262,6 +262,11 @@ public class ScalaAkkaClientCodegen extends AbstractScalaCodegen implements Code @Override public String toParamName(String name) { + // obtain the name from parameterNameMapping directly if provided + if (parameterNameMapping.containsKey(name)) { + return parameterNameMapping.get(name); + } + return formatIdentifier(name, false); } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaLagomServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaLagomServerCodegen.java index fedb4d8a1a7..3a2e44d5264 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaLagomServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaLagomServerCodegen.java @@ -133,6 +133,11 @@ public class ScalaLagomServerCodegen extends AbstractScalaCodegen implements Cod @Override public String toParamName(String name) { + // obtain the name from parameterNameMapping directly if provided + if (parameterNameMapping.containsKey(name)) { + return parameterNameMapping.get(name); + } + // should be the same as variable name return toVarName(name); } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttp4ClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttp4ClientCodegen.java index f9b40cd9033..d18a8303dc4 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttp4ClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttp4ClientCodegen.java @@ -380,6 +380,11 @@ public class ScalaSttp4ClientCodegen extends AbstractScalaCodegen implements Cod @Override public String toParamName(String name) { + // obtain the name from parameterNameMapping directly if provided + if (parameterNameMapping.containsKey(name)) { + return parameterNameMapping.get(name); + } + return formatIdentifier(name, false); } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttpClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttpClientCodegen.java index c08a4d90708..41bfaab09e0 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttpClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttpClientCodegen.java @@ -398,6 +398,11 @@ public class ScalaSttpClientCodegen extends AbstractScalaCodegen implements Code @Override public String toParamName(String name) { + // obtain the name from parameterNameMapping directly if provided + if (parameterNameMapping.containsKey(name)) { + return parameterNameMapping.get(name); + } + return formatIdentifier(name, false); } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalazClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalazClientCodegen.java index f61a508ecc2..8612cde4d88 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalazClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalazClientCodegen.java @@ -139,6 +139,11 @@ public class ScalazClientCodegen extends AbstractScalaCodegen implements Codegen @Override public String toParamName(String name) { + // obtain the name from parameterNameMapping directly if provided + if (parameterNameMapping.containsKey(name)) { + return parameterNameMapping.get(name); + } + // should be the same as variable name return toVarName(name); } diff --git a/modules/openapi-generator/src/test/resources/3_0/scala/petstore.yaml b/modules/openapi-generator/src/test/resources/3_0/scala/petstore.yaml index 2f62e97a375..cfd47219f21 100644 --- a/modules/openapi-generator/src/test/resources/3_0/scala/petstore.yaml +++ b/modules/openapi-generator/src/test/resources/3_0/scala/petstore.yaml @@ -566,6 +566,41 @@ paths: description: User not found security: - api_key: [] + /fake/parameter-name-mapping: + get: + tags: + - fake + summary: parameter name mapping test + operationId: getParameterNameMapping + parameters: + - name: _type + in: header + description: _type + required: true + schema: + type: integer + format: int64 + - name: type + in: query + description: type + required: true + schema: + type: string + - name: type_ + in: header + description: type_ + required: true + schema: + type: string + - name: http_debug_option + in: query + description: http debug option (to test parameter naming option) + required: true + schema: + type: string + responses: + 200: + description: OK externalDocs: description: Find out more about Swagger url: 'http://swagger.io' @@ -758,3 +793,13 @@ components: type: string type: array type: object + PropertyNameMapping: + properties: + http_debug_operation: + type: string + _type: + type: string + type: + type: string + type_: + type: string diff --git a/samples/client/petstore/scala-sttp/.openapi-generator/FILES b/samples/client/petstore/scala-sttp/.openapi-generator/FILES index dae7253b839..80b204182f1 100644 --- a/samples/client/petstore/scala-sttp/.openapi-generator/FILES +++ b/samples/client/petstore/scala-sttp/.openapi-generator/FILES @@ -1,6 +1,7 @@ README.md build.sbt project/build.properties +src/main/scala/org/openapitools/client/api/FakeApi.scala src/main/scala/org/openapitools/client/api/PetApi.scala src/main/scala/org/openapitools/client/api/StoreApi.scala src/main/scala/org/openapitools/client/api/UserApi.scala @@ -12,5 +13,6 @@ src/main/scala/org/openapitools/client/model/Category.scala src/main/scala/org/openapitools/client/model/EnumTest.scala src/main/scala/org/openapitools/client/model/Order.scala src/main/scala/org/openapitools/client/model/Pet.scala +src/main/scala/org/openapitools/client/model/PropertyNameMapping.scala src/main/scala/org/openapitools/client/model/Tag.scala src/main/scala/org/openapitools/client/model/User.scala diff --git a/samples/client/petstore/scala-sttp/README.md b/samples/client/petstore/scala-sttp/README.md index 457e38335d3..acae1820f66 100644 --- a/samples/client/petstore/scala-sttp/README.md +++ b/samples/client/petstore/scala-sttp/README.md @@ -65,6 +65,7 @@ All URIs are relative to *http://petstore.swagger.io/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- +*FakeApi* | **getParameterNameMapping** | **GET** /fake/parameter-name-mapping | parameter name mapping test *PetApi* | **addPet** | **POST** /pet | Add a new pet to the store *PetApi* | **deletePet** | **DELETE** /pet/${petId} | Deletes a pet *PetApi* | **findPetsByStatus** | **GET** /pet/findByStatus | Finds Pets by status @@ -94,6 +95,7 @@ Class | Method | HTTP request | Description - [EnumTest](EnumTest.md) - [Order](Order.md) - [Pet](Pet.md) + - [PropertyNameMapping](PropertyNameMapping.md) - [Tag](Tag.md) - [User](User.md) diff --git a/samples/client/petstore/scala-sttp/src/main/scala/org/openapitools/client/api/FakeApi.scala b/samples/client/petstore/scala-sttp/src/main/scala/org/openapitools/client/api/FakeApi.scala new file mode 100644 index 00000000000..a7006555fe4 --- /dev/null +++ b/samples/client/petstore/scala-sttp/src/main/scala/org/openapitools/client/api/FakeApi.scala @@ -0,0 +1,43 @@ +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +package org.openapitools.client.api + +import org.openapitools.client.core.JsonSupport._ +import sttp.client3._ +import sttp.model.Method + +object FakeApi { + +def apply(baseUrl: String = "http://petstore.swagger.io/v2") = new FakeApi(baseUrl) +} + +class FakeApi(baseUrl: String) { + + /** + * Expected answers: + * code 200 : (OK) + * + * @param underscoreType _type + * @param `type` type + * @param typeWithUnderscore type_ + * @param httpDebugOption http debug option (to test parameter naming option) + */ + def getParameterNameMapping(underscoreType: Long, `type`: String, typeWithUnderscore: String, httpDebugOption: String +): Request[Either[ResponseException[String, Exception], Unit], Any] = + basicRequest + .method(Method.GET, uri"$baseUrl/fake/parameter-name-mapping?type=${ `type` }&http_debug_option=${ httpDebugOption }") + .contentType("application/json") + .header("_type", underscoreType.toString) + .header("type_", typeWithUnderscore.toString) + .response(asJson[Unit]) + +} diff --git a/samples/client/petstore/scala-sttp/src/main/scala/org/openapitools/client/model/PropertyNameMapping.scala b/samples/client/petstore/scala-sttp/src/main/scala/org/openapitools/client/model/PropertyNameMapping.scala new file mode 100644 index 00000000000..3782f4c12be --- /dev/null +++ b/samples/client/petstore/scala-sttp/src/main/scala/org/openapitools/client/model/PropertyNameMapping.scala @@ -0,0 +1,21 @@ +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +package org.openapitools.client.model + + +case class PropertyNameMapping( + `httpDebugOperation`: Option[String] = None, + `underscoreType`: Option[String] = None, + `type`: Option[String] = None, + `typeWithUnderscore`: Option[String] = None +) +