Skip to content

Commit 46e8ccb

Browse files
eriktimwing328
authored andcommitted
[elm] Import types in operations (#2488)
* [elm] Import types in operations And stringify UUIDs. Fixes #2484. * [elm] Improve operation dependency detection
1 parent 0f99cd0 commit 46e8ccb

File tree

1 file changed

+30
-7
lines changed

1 file changed

+30
-7
lines changed

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

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@
3030
import java.io.File;
3131
import java.text.Collator;
3232
import java.util.*;
33+
import java.util.function.Predicate;
3334
import java.util.stream.Collectors;
35+
import java.util.stream.Stream;
3436

3537
import static org.openapitools.codegen.utils.StringUtils.camelize;
3638

@@ -411,14 +413,26 @@ public Map<String, Object> postProcessModels(Map<String, Object> objs) {
411413
return postProcessModelsEnum(objs);
412414
}
413415

416+
private static boolean anyOperationParam(final List<CodegenOperation> operations, final Predicate<CodegenParameter> predicate) {
417+
return operations.stream()
418+
.flatMap(operation -> Stream.of(
419+
operation.bodyParams.stream(),
420+
operation.queryParams.stream(),
421+
operation.pathParams.stream(),
422+
operation.headerParams.stream()
423+
))
424+
.flatMap(a -> a)
425+
.filter(predicate)
426+
.findAny()
427+
.isPresent();
428+
}
429+
414430
@Override
415431
@SuppressWarnings({"static-method", "unchecked"})
416432
public Map<String, Object> postProcessOperationsWithModels(Map<String, Object> operations, List<Object> allModels) {
417433
Map<String, Object> objs = (Map<String, Object>) operations.get("operations");
418434
List<CodegenOperation> ops = (List<CodegenOperation>) objs.get("operation");
419435

420-
boolean hasDateTime = false;
421-
boolean hasDate = false;
422436
final Map<String, Set<String>> dependencies = new HashMap<>();
423437

424438
for (CodegenOperation op : ops) {
@@ -427,8 +441,6 @@ public Map<String, Object> postProcessOperationsWithModels(Map<String, Object> o
427441
for (CodegenParameter param : op.pathParams) {
428442
final String var = paramToString("params", param, false, null);
429443
path = path.replace("{" + param.paramName + "}", "\" ++ " + var + " ++ \"");
430-
hasDateTime = hasDateTime || param.isDateTime;
431-
hasDate = hasDate || param.isDate;
432444
}
433445
op.path = ("\"" + path + "\"").replaceAll(" \\+\\+ \"\"", "");
434446
} else {
@@ -437,8 +449,6 @@ public Map<String, Object> postProcessOperationsWithModels(Map<String, Object> o
437449
for (CodegenParameter param : op.pathParams) {
438450
String str = paramToString("params", param, false, null);
439451
path = path.replace("{" + param.paramName + "}", str);
440-
hasDateTime = hasDateTime || param.isDateTime;
441-
hasDate = hasDate || param.isDate;
442452
}
443453
op.path = path;
444454

@@ -487,6 +497,7 @@ public Map<String, Object> postProcessOperationsWithModels(Map<String, Object> o
487497
elmImport.hasExposures = true;
488498
elmImports.add(elmImport);
489499
}
500+
final boolean hasDate = anyOperationParam(ops, param -> param.isDate);
490501
if (hasDate) {
491502
final ElmImport elmImport = new ElmImport();
492503
elmImport.moduleName = "DateOnly";
@@ -495,6 +506,7 @@ public Map<String, Object> postProcessOperationsWithModels(Map<String, Object> o
495506
elmImport.hasExposures = true;
496507
elmImports.add(elmImport);
497508
}
509+
final boolean hasDateTime = anyOperationParam(ops, param -> param.isDateTime);
498510
if (hasDateTime) {
499511
final ElmImport elmImport = new ElmImport();
500512
elmImport.moduleName = "DateTime";
@@ -503,6 +515,15 @@ public Map<String, Object> postProcessOperationsWithModels(Map<String, Object> o
503515
elmImport.hasExposures = true;
504516
elmImports.add(elmImport);
505517
}
518+
final boolean hasUuid = anyOperationParam(ops, param -> param.isUuid);
519+
if (hasUuid) {
520+
final ElmImport elmImport = new ElmImport();
521+
elmImport.moduleName = "Uuid";
522+
elmImport.exposures = new TreeSet<>();
523+
elmImport.exposures.add("Uuid");
524+
elmImport.hasExposures = true;
525+
elmImports.add(elmImport);
526+
}
506527
operations.put("elmImports", elmImports);
507528

508529
return operations;
@@ -553,14 +574,16 @@ private String paramToString(final String prefix, final CodegenParameter param,
553574
}
554575

555576
String mapFn = null;
556-
if (param.isString || param.isUuid || param.isBinary || param.isByteArray) {
577+
if (param.isString || param.isBinary || param.isByteArray) {
557578
mapFn = "";
558579
} else if (param.isBoolean) {
559580
mapFn = "(\\val -> if val then \"true\" else \"false\")";
560581
} else if (param.isDateTime) {
561582
mapFn = "DateTime.toString";
562583
} else if (param.isDate) {
563584
mapFn = "DateOnly.toString";
585+
} else if (param.isUuid) {
586+
mapFn = "Uuid.toString";
564587
} else if (ElmVersion.ELM_018.equals(elmVersion)) {
565588
mapFn = "toString";
566589
} else if (param.isInteger || param.isLong) {

0 commit comments

Comments
 (0)