diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ElmClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ElmClientCodegen.java index 30709f3dd97..ae51ceba3f1 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ElmClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ElmClientCodegen.java @@ -9,6 +9,8 @@ import io.swagger.codegen.CodegenResponse; import io.swagger.codegen.CodegenType; import io.swagger.codegen.DefaultCodegen; import io.swagger.codegen.SupportingFile; +import io.swagger.models.ArrayModel; +import io.swagger.models.Model; import io.swagger.models.Response; import io.swagger.models.parameters.Parameter; import io.swagger.models.properties.ArrayProperty; @@ -103,6 +105,7 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig { ); instantiationTypes.clear(); + instantiationTypes.put("array", "List"); typeMapping.clear(); typeMapping.put("integer", "Int"); @@ -181,6 +184,17 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig { return camelized; } + @Override + public String toInstantiationType(Property p) { + if (p instanceof ArrayProperty) { + ArrayProperty ap = (ArrayProperty) p; + String inner = getSwaggerType(ap.getItems()); + return instantiationTypes.get("array") + " " + inner; + } else { + return null; + } + } + @Override public String escapeReservedWord(String name) { return name + "_"; @@ -196,6 +210,20 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig { return outputFolder + "/src/Data/" + modelPackage().replace('.', File.separatorChar); } + @Override + public CodegenModel fromModel(String name, Model model, Map allDefinitions) { + CodegenModel m = super.fromModel(name, model, allDefinitions); + + if (model instanceof ArrayModel) { + ArrayModel am = (ArrayModel) model; + ArrayProperty arrayProperty = new ArrayProperty(am.getItems()); + CodegenProperty codegenProperty = fromProperty(name, arrayProperty); + m.vendorExtensions.putAll(codegenProperty.vendorExtensions); + } + + return m; + } + @SuppressWarnings({ "static-method", "unchecked" }) public Map postProcessAllModels(Map objs) { // Index all CodegenModels by model name. @@ -245,6 +273,20 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig { elmImports.add(createPropertyImport(property)); } } + if (cm.isArrayModel) { + if (cm.arrayModelType != null) { + // add type imports + final ElmImport elmImport = new ElmImport(); + final String modulePrefix = customPrimitives.contains(cm.arrayModelType) ? "" : "Data."; + elmImport.moduleName = modulePrefix + cm.arrayModelType; + elmImport.exposures = new TreeSet<>(); + elmImport.exposures.add(cm.arrayModelType); + elmImport.exposures.add(camelize(cm.arrayModelType, true) + "Decoder"); + elmImport.exposures.add(camelize(cm.arrayModelType, true) + "Encoder"); + elmImport.hasExposures = true; + elmImports.add(elmImport); + } + } if (cm.discriminator != null) { for (CodegenModel child : cm.children) { // add child imports @@ -418,7 +460,7 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig { return toOptionalValue(null); } } - + private String toOptionalValue(String value) { if (value == null) { return "Nothing"; @@ -508,4 +550,4 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig { public Set exposures; public Boolean hasExposures; } -} \ No newline at end of file +} diff --git a/modules/swagger-codegen/src/main/resources/elm/aliasDecoder.mustache b/modules/swagger-codegen/src/main/resources/elm/aliasDecoder.mustache index 9d98b5a1d0a..1595b1fd440 100644 --- a/modules/swagger-codegen/src/main/resources/elm/aliasDecoder.mustache +++ b/modules/swagger-codegen/src/main/resources/elm/aliasDecoder.mustache @@ -1,5 +1,5 @@ {{classVarName}}Decoder : Decoder {{classname}} {{classVarName}}Decoder = - decode {{classname}} + {{#parent}}Decode.list {{vendorExtensions.x-decoder}}{{/parent}}{{^parent}}decode {{classname}} {{#allVars}}{{^discriminatorValue}} |> {{>fieldDecoder}} -{{/discriminatorValue}}{{/allVars}} \ No newline at end of file +{{/discriminatorValue}}{{/allVars}}{{/parent}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/elm/aliasEncoder.mustache b/modules/swagger-codegen/src/main/resources/elm/aliasEncoder.mustache index 662453c3cec..2c422499ff7 100644 --- a/modules/swagger-codegen/src/main/resources/elm/aliasEncoder.mustache +++ b/modules/swagger-codegen/src/main/resources/elm/aliasEncoder.mustache @@ -1,7 +1,7 @@ {{classVarName}}Encoder : {{classname}} -> Encode.Value {{classVarName}}Encoder model = - Encode.object + {{#parent}}Encode.list (List.map {{vendorExtensions.x-encoder}} model){{/parent}}{{^parent}}Encode.object {{#allVars}} {{#-first}}[{{/-first}}{{^-first}},{{/-first}} {{>fieldEncoder}} {{/allVars}} - ] + ]{{/parent}} diff --git a/modules/swagger-codegen/src/main/resources/elm/modelTypeAlias.mustache b/modules/swagger-codegen/src/main/resources/elm/modelTypeAlias.mustache index fb6427cf6d3..9f604464d62 100644 --- a/modules/swagger-codegen/src/main/resources/elm/modelTypeAlias.mustache +++ b/modules/swagger-codegen/src/main/resources/elm/modelTypeAlias.mustache @@ -1,6 +1,6 @@ -type alias {{classname}} = +type alias {{classname}} ={{#parent}} {{parent}}{{/parent}}{{^parent}} { {{#vars}}{{^-first}} , {{/-first}}{{name}} : {{^required}}Maybe {{/required}}{{#isContainer}}(List {{/isContainer}}{{#isEnum}}{{nameInCamelCase}}{{/isEnum}}{{^isEnum}}{{datatype}}{{/isEnum}}{{#isContainer}}){{/isContainer}} {{/vars}} } {{#vars}} @@ -10,6 +10,7 @@ type alias {{classname}} = {{>union}} {{/isEnum}} {{/vars}} +{{/parent}} {{>aliasDecoder}}