diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaJavaGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaJavaGenerator.java index 8337877152a..82d4d2fc17d 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaJavaGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaJavaGenerator.java @@ -131,8 +131,7 @@ public static String toEnum(String value) { } if (!value.matches("[A-Z0-9_]+")) { - // convert camelCase77String to CAMEL_CASE_77_STRING - return value.replaceAll("-", "_").replaceAll("(.+?)([A-Z]|[0-9])", "$1_$2").toUpperCase(Locale.ROOT); + return Helpers.toScreamingSnakeCase(value); } return value; diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaPythonGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaPythonGenerator.java index 17fd509bd0f..037c4bc8782 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaPythonGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaPythonGenerator.java @@ -161,4 +161,28 @@ public String toEnumDefaultValue(CodegenProperty property, String value) { // always default to None in the client, to let the server handle the default value. return "None"; } + + public static String toEnum(String value) { + // we only convert the full lowercase enums as they have a fallback to camelCase enums with the + // same name so no BC is introduced + if (!value.toLowerCase().equals(value)) { + // special edge case for onewaysynonym because there's no way to distinguish the two at the + // generation level + if (value.equals("'oneWaySynonym'")) { + return Helpers.toSnakeCase(value); + } + return value; + } + return Helpers.toScreamingSnakeCase(value); + } + + @Override + public String toEnumVariableName(String value, String datatype) { + return super.toEnumVariableName(toEnum(value), datatype); + } + + @Override + public String toEnumVarName(String value, String datatype) { + return super.toEnumVarName(toEnum(value), datatype); + } } diff --git a/generators/src/main/java/com/algolia/codegen/utils/Helpers.java b/generators/src/main/java/com/algolia/codegen/utils/Helpers.java index 4296d2dad54..5db94c9bc32 100644 --- a/generators/src/main/java/com/algolia/codegen/utils/Helpers.java +++ b/generators/src/main/java/com/algolia/codegen/utils/Helpers.java @@ -41,6 +41,16 @@ public static String camelize(String kebabStr) { return camel; } + // convert camelCase77String to CAMEL_CASE_77_STRING + public static String toScreamingSnakeCase(String camelCase) { + return camelCase + .replaceAll("-", "_") + .replaceAll("/", "_") + .replaceAll("(?<=.)([A-Z]+|\\d+)", "_$1") + .replaceAll("__", "_") + .toUpperCase(Locale.ROOT); + } + /** * Will add the boolean `vendorExtensions.x-is-custom-request` to operations if they should not * escape '/' in the path variable diff --git a/specs/search/paths/synonyms/common/parameters.yml b/specs/search/paths/synonyms/common/parameters.yml index 912b4b70de2..63e5933cd54 100644 --- a/specs/search/paths/synonyms/common/parameters.yml +++ b/specs/search/paths/synonyms/common/parameters.yml @@ -30,6 +30,9 @@ SynonymType: - altcorrection1 - altcorrection2 - placeholder + - oneWaySynonym + - altCorrection1 + - altCorrection2 ObjectID: name: objectID