Skip to content

Commit 0a204d8

Browse files
committed
fix: scala enum case sensitiveness
1 parent 1e9d977 commit 0a204d8

File tree

3 files changed

+44
-7
lines changed

3 files changed

+44
-7
lines changed

clients/algoliasearch-client-scala/src/main/scala/algoliasearch/extension/package.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import algoliasearch.extension.internal.RetryUntil.{DEFAULT_DELAY, retryUntil}
88
import algoliasearch.internal.util.{escape, paramToString}
99
import algoliasearch.search._
1010
import org.json4s.{DefaultFormats, Extraction, Formats}
11+
import org.json4s.jvalue2extractable
1112

1213
import java.nio.charset.StandardCharsets
1314
import java.util.Base64

generators/src/main/java/com/algolia/codegen/AlgoliaScalaGenerator.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io.swagger.v3.oas.models.Operation;
99
import io.swagger.v3.oas.models.servers.Server;
1010
import java.io.File;
11+
import java.util.Collections;
1112
import java.util.List;
1213
import java.util.Map;
1314
import java.util.logging.Logger;
@@ -141,12 +142,49 @@ private String escapePath(String path) {
141142
return buf.toString();
142143
}
143144

145+
@Override
146+
protected void postProcessEnumVars(List<Map<String, Object>> enumVars) {
147+
Collections.reverse(enumVars);
148+
enumVars.forEach(v -> {
149+
String name = (String) v.get("name");
150+
long count = enumVars.stream().filter(v1 -> ((String) v1.get("name")).equalsIgnoreCase(name)).count();
151+
if (count > 1L) {
152+
String uniqueEnumName = this.getUniqueEnumName(name, enumVars);
153+
Object var10001 = v.get("name");
154+
this.logger.warning("Changing duplicate enumeration name from " + var10001 + " to " + uniqueEnumName);
155+
v.put("name", uniqueEnumName);
156+
}
157+
});
158+
Collections.reverse(enumVars);
159+
}
160+
161+
private String getUniqueEnumName(String name, List<Map<String, Object>> enumVars) {
162+
long count = enumVars.stream().filter(v -> ((String) v.get("name")).equalsIgnoreCase(name)).count();
163+
return count > 1L ? this.getUniqueEnumName(name + "Alt", enumVars) : name;
164+
}
165+
166+
@Override
167+
public String toEnumVarName(String value, String datatype) {
168+
if (value.isEmpty()) {
169+
return "Empty";
170+
} else {
171+
var var = lowerCamelCase(value);
172+
return this.reservedWords.contains(var) ? this.escapeReservedWord(var) : var;
173+
}
174+
}
175+
144176
@Override
145177
public Map<String, ModelsMap> postProcessAllModels(Map<String, ModelsMap> objs) {
146178
Map<String, ModelsMap> models = super.postProcessAllModels(objs);
147179
GenericPropagator.propagateGenericsToModels(models, true);
148180
OneOf.updateModelsOneOf(models, modelPackage);
149181
OneOf.addOneOfMetadata(models);
182+
183+
// Scala doesn't support sensitive casing for enums
184+
for (var model : models.values()) {
185+
this.postProcessModelsEnum(model);
186+
}
187+
150188
return models;
151189
}
152190

templates/scala/enum.mustache

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,13 @@ sealed trait {{classname}}{{#vendorExtensions}}{{#x-one-of-element}}{{#x-one-of-
66
* {{#description}}{{{.}}}{{/description}}{{^description}}{{classname}} enumeration{{/description}}
77
*/
88
object {{classname}} {
9-
{{#allowableValues}}
10-
{{#values}}
11-
case object {{#fnEnumEntry}}{{.}}{{/fnEnumEntry}} extends {{classname}} {
12-
override def toString = "{{{.}}}"
9+
{{#allowableValues.enumVars}}
10+
case object {{#fnEnumEntry}}{{{name}}}{{/fnEnumEntry}} extends {{classname}} {
11+
override def toString = {{{value}}}
1312
}
14-
{{/values}}
15-
{{/allowableValues}}
13+
{{/allowableValues.enumVars}}
1614
{{#allowableValues}}
17-
val values: Seq[{{classname}}] = Seq({{#values}}{{#fnEnumEntry}}{{.}}{{/fnEnumEntry}}{{^-last}},{{/-last}}{{/values}})
15+
val values: Seq[{{classname}}] = Seq({{#enumVars}}{{#fnEnumEntry}}{{{name}}}{{/fnEnumEntry}}{{^-last}},{{/-last}}{{/enumVars}})
1816
{{/allowableValues}}
1917

2018
def withName(name: String): {{classname}} = {{classname}}.values

0 commit comments

Comments
 (0)