diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElmClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElmClientCodegen.java index 54be2fc33b1..53da359a3b8 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElmClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElmClientCodegen.java @@ -66,7 +66,7 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig { private static final String ENCODER = "elmEncoder"; private static final String DECODER = "elmDecoder"; private static final String DISCRIMINATOR_NAME = "discriminatorName"; - private static final String UNION_TYPE = "elmUnionType"; + private static final String CUSTOM_TYPE = "elmCustomType"; protected String packageName = "openapi"; protected String packageVersion = "1.0.0"; @@ -123,6 +123,7 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig { "Dict", "Float", "Int", + "List", "String") ); @@ -352,7 +353,7 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig { CodegenModel cm = (CodegenModel) mo.get("model"); if (cm.isEnum) { addEncoderAndDecoder(cm.vendorExtensions, cm.classname, DataTypeExposure.EXPOSED); - cm.vendorExtensions.put(UNION_TYPE, cm.classname); + cm.vendorExtensions.put(CUSTOM_TYPE, cm.classname); } else if (cm.isAlias) { addEncoderAndDecoder(cm.vendorExtensions, cm.dataType, DataTypeExposure.EXPOSED); } @@ -578,7 +579,7 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig { if (property.isEnum) { addEncoderAndDecoder(property.vendorExtensions, property.baseName, DataTypeExposure.INTERNAL); - property.vendorExtensions.put(UNION_TYPE, property.datatypeWithEnum); + property.vendorExtensions.put(CUSTOM_TYPE, property.datatypeWithEnum); } else { final boolean isPrimitiveType = property.isMapContainer ? isPrimitiveDataType(property.dataType) : property.isPrimitiveType; addEncoderAndDecoder(property.vendorExtensions, property.dataType, isPrimitiveType ? DataTypeExposure.PRIMITIVE : DataTypeExposure.EXTERNAL); diff --git a/modules/openapi-generator/src/main/resources/elm/union.mustache b/modules/openapi-generator/src/main/resources/elm/customType.mustache similarity index 67% rename from modules/openapi-generator/src/main/resources/elm/union.mustache rename to modules/openapi-generator/src/main/resources/elm/customType.mustache index 25dc6d89cde..282c1808ac4 100644 --- a/modules/openapi-generator/src/main/resources/elm/union.mustache +++ b/modules/openapi-generator/src/main/resources/elm/customType.mustache @@ -1,4 +1,4 @@ -type {{#vendorExtensions}}{{elmUnionType}}{{/vendorExtensions}} +type {{#vendorExtensions}}{{elmCustomType}}{{/vendorExtensions}} {{#allowableValues}} {{#enumVars}} {{#-first}}={{/-first}}{{^-first}}|{{/-first}} {{name}} diff --git a/modules/openapi-generator/src/main/resources/elm/unionDecoder.mustache b/modules/openapi-generator/src/main/resources/elm/customTypeDecoder.mustache similarity index 97% rename from modules/openapi-generator/src/main/resources/elm/unionDecoder.mustache rename to modules/openapi-generator/src/main/resources/elm/customTypeDecoder.mustache index 4051dce9f6e..51847f26233 100644 --- a/modules/openapi-generator/src/main/resources/elm/unionDecoder.mustache +++ b/modules/openapi-generator/src/main/resources/elm/customTypeDecoder.mustache @@ -1,4 +1,4 @@ -{{vendorExtensions.elmDecoder}} : Decoder {{vendorExtensions.elmUnionType}} +{{vendorExtensions.elmDecoder}} : Decoder {{vendorExtensions.elmCustomType}} {{vendorExtensions.elmDecoder}} = Decode.string |> Decode.andThen diff --git a/modules/openapi-generator/src/main/resources/elm/unionEncoder.mustache b/modules/openapi-generator/src/main/resources/elm/customTypeEncoder.mustache similarity index 68% rename from modules/openapi-generator/src/main/resources/elm/unionEncoder.mustache rename to modules/openapi-generator/src/main/resources/elm/customTypeEncoder.mustache index 2c286154f07..e5dbfbe02a4 100644 --- a/modules/openapi-generator/src/main/resources/elm/unionEncoder.mustache +++ b/modules/openapi-generator/src/main/resources/elm/customTypeEncoder.mustache @@ -1,4 +1,4 @@ -{{vendorExtensions.elmEncoder}} : {{vendorExtensions.elmUnionType}} -> Encode.Value +{{vendorExtensions.elmEncoder}} : {{vendorExtensions.elmCustomType}} -> Encode.Value {{vendorExtensions.elmEncoder}} model = case model of {{#allowableValues}} diff --git a/modules/openapi-generator/src/main/resources/elm/fieldDecoder.mustache b/modules/openapi-generator/src/main/resources/elm/fieldDecoder.mustache deleted file mode 100644 index c40e55b7390..00000000000 --- a/modules/openapi-generator/src/main/resources/elm/fieldDecoder.mustache +++ /dev/null @@ -1 +0,0 @@ -{{#required}}required{{/required}}{{^required}}optional{{/required}} "{{baseName}}" {{^required}}(Decode.nullable {{/required}}{{#isMapContainer}}(Decode.dict {{/isMapContainer}}{{#isListContainer}}(Decode.list {{/isListContainer}}{{vendorExtensions.elmDecoder}}{{#isContainer}}){{/isContainer}}{{^required}}){{/required}}{{^required}} {{{defaultValue}}}{{/required}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/elm/fieldEncoder.mustache b/modules/openapi-generator/src/main/resources/elm/fieldEncoder.mustache deleted file mode 100644 index 58bd131abbf..00000000000 --- a/modules/openapi-generator/src/main/resources/elm/fieldEncoder.mustache +++ /dev/null @@ -1 +0,0 @@ -( "{{baseName}}", {{#discriminatorValue}}Encode.string "{{discriminatorValue}}"{{/discriminatorValue}}{{^discriminatorValue}}{{^required}}Maybe.withDefault Encode.null (Maybe.map {{/required}}{{#isMapContainer}}(Encode.dict identity {{/isMapContainer}}{{#isListContainer}}(Encode.list {{#isElm018}}<< List.map {{/isElm018}}{{/isListContainer}}{{vendorExtensions.elmEncoder}}{{#isContainer}}){{/isContainer}} model.{{name}}{{^required}}){{/required}}{{/discriminatorValue}} ) \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/elm/model.mustache b/modules/openapi-generator/src/main/resources/elm/model.mustache index 4fef4dd19d5..a0868e90286 100644 --- a/modules/openapi-generator/src/main/resources/elm/model.mustache +++ b/modules/openapi-generator/src/main/resources/elm/model.mustache @@ -1,6 +1,6 @@ {{>licenseInfo}} -module Data.{{classname}} exposing ({{#models}}{{#model}}{{classname}}{{#hasChildren}}(..){{/hasChildren}}{{#isEnum}}(..){{/isEnum}}{{^isEnum}}{{#vars}}{{#isEnum}}, {{vendorExtensions.elmUnionType}}(..){{/isEnum}}{{/vars}}{{/isEnum}}, decoder, encoder{{/model}}{{/models}}) +module Data.{{classname}} exposing ({{#models}}{{#model}}{{classname}}{{#hasChildren}}(..){{/hasChildren}}{{#isEnum}}(..){{/isEnum}}{{^isEnum}}{{#vars}}{{#isEnum}}, {{vendorExtensions.elmCustomType}}(..){{/isEnum}}{{/vars}}{{/isEnum}}, decoder, encoder{{/model}}{{/models}}) {{>imports}}import Dict exposing (Dict) import Json.Decode as Decode exposing (Decoder) @@ -14,6 +14,6 @@ import Json.Encode as Encode {-| {{{description}}} -} {{/description}} -{{#isEnum}}{{>modelTypeUnion}}{{/isEnum}}{{^isEnum}}{{#discriminator}}{{>modelTypeDiscriminator}}{{/discriminator}}{{^discriminator}}{{#isAlias}}{{>modelTypePrimitive}}{{/isAlias}}{{^isAlias}}{{#isArrayModel}}{{>modelTypeArray}}{{/isArrayModel}}{{^isArrayModel}}{{>modelTypeAlias}}{{/isArrayModel}}{{/isAlias}}{{/discriminator}}{{/isEnum}} +{{#isEnum}}{{>modelTypeCustom}}{{/isEnum}}{{^isEnum}}{{#discriminator}}{{>modelTypeDiscriminator}}{{/discriminator}}{{^discriminator}}{{#isAlias}}{{>modelTypePrimitive}}{{/isAlias}}{{^isAlias}}{{#isArrayModel}}{{>modelTypeArray}}{{/isArrayModel}}{{^isArrayModel}}{{>modelTypeRecord}}{{/isArrayModel}}{{/isAlias}}{{/discriminator}}{{/isEnum}} {{/model}} {{/models}} diff --git a/modules/openapi-generator/src/main/resources/elm/modelTypeAlias.mustache b/modules/openapi-generator/src/main/resources/elm/modelTypeAlias.mustache deleted file mode 100644 index 1a334177900..00000000000 --- a/modules/openapi-generator/src/main/resources/elm/modelTypeAlias.mustache +++ /dev/null @@ -1,26 +0,0 @@ -type alias {{classname}} = - { {{#allVars}}{{^-first}} , {{/-first}}{{name}} : {{^required}}Maybe {{#isContainer}}({{/isContainer}}{{/required}}{{#isMapContainer}}Dict String {{/isMapContainer}}{{#isListContainer}}List {{/isListContainer}}{{#isEnum}}{{nameInCamelCase}}{{/isEnum}}{{^isEnum}}{{dataType}}{{/isEnum}}{{^required}}{{#isContainer}}){{/isContainer}}{{/required}} -{{/allVars}} } -{{#vars}} -{{#isEnum}} - - -{{>union}} -{{/isEnum}} -{{/vars}} - - -{{>aliasDecoder}} - - -{{>aliasEncoder}} -{{#vars}} -{{#isEnum}} - - -{{>unionDecoder}} - - -{{>unionEncoder}} -{{/isEnum}} -{{/vars}} diff --git a/modules/openapi-generator/src/main/resources/elm/modelTypeCustom.mustache b/modules/openapi-generator/src/main/resources/elm/modelTypeCustom.mustache new file mode 100644 index 00000000000..cc062e43031 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/elm/modelTypeCustom.mustache @@ -0,0 +1,7 @@ +{{>customType}} + + +{{>customTypeDecoder}} + + +{{>customTypeEncoder}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/elm/modelTypeRecord.mustache b/modules/openapi-generator/src/main/resources/elm/modelTypeRecord.mustache new file mode 100644 index 00000000000..cb2e5185791 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/elm/modelTypeRecord.mustache @@ -0,0 +1,26 @@ +type alias {{classname}} = + { {{#allVars}}{{^-first}} , {{/-first}}{{name}} : {{^required}}{{^isNullable}}Maybe ({{/isNullable}}{{/required}}{{>recordFieldType}}{{^required}}{{^isNullable}}){{/isNullable}}{{/required}} +{{/allVars}} } +{{#vars}} +{{#isEnum}} + + +{{>customType}} +{{/isEnum}} +{{/vars}} + + +{{>recordDecoder}} + + +{{>recordEncoder}} +{{#vars}} +{{#isEnum}} + + +{{>customTypeDecoder}} + + +{{>customTypeEncoder}} +{{/isEnum}} +{{/vars}} diff --git a/modules/openapi-generator/src/main/resources/elm/modelTypeUnion.mustache b/modules/openapi-generator/src/main/resources/elm/modelTypeUnion.mustache deleted file mode 100644 index 4e353e84976..00000000000 --- a/modules/openapi-generator/src/main/resources/elm/modelTypeUnion.mustache +++ /dev/null @@ -1,7 +0,0 @@ -{{>union}} - - -{{>unionDecoder}} - - -{{>unionEncoder}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/elm/aliasDecoder.mustache b/modules/openapi-generator/src/main/resources/elm/recordDecoder.mustache similarity index 81% rename from modules/openapi-generator/src/main/resources/elm/aliasDecoder.mustache rename to modules/openapi-generator/src/main/resources/elm/recordDecoder.mustache index c03d1c5b74f..f9b2e907615 100644 --- a/modules/openapi-generator/src/main/resources/elm/aliasDecoder.mustache +++ b/modules/openapi-generator/src/main/resources/elm/recordDecoder.mustache @@ -2,5 +2,5 @@ decoder : Decoder {{classname}} decoder = {{#isElm018}}decode{{/isElm018}}{{#isElm019}}Decode.succeed{{/isElm019}} {{classname}} {{#allVars}} - |> {{>fieldDecoder}} + |> {{>recordFieldDecoder}} {{/allVars}} diff --git a/modules/openapi-generator/src/main/resources/elm/aliasEncoder.mustache b/modules/openapi-generator/src/main/resources/elm/recordEncoder.mustache similarity index 84% rename from modules/openapi-generator/src/main/resources/elm/aliasEncoder.mustache rename to modules/openapi-generator/src/main/resources/elm/recordEncoder.mustache index b4435dfb03d..af4815e0156 100644 --- a/modules/openapi-generator/src/main/resources/elm/aliasEncoder.mustache +++ b/modules/openapi-generator/src/main/resources/elm/recordEncoder.mustache @@ -2,6 +2,6 @@ encoder : {{#vendorExtensions.discriminatorName}}String -> {{/vendorExtensions.d encoder {{#vendorExtensions.discriminatorName}}tag {{/vendorExtensions.discriminatorName}}model = Encode.object {{#allVars}} - {{#-first}}[{{/-first}}{{^-first}},{{/-first}} {{>fieldEncoder}} + {{#-first}}[{{/-first}}{{^-first}},{{/-first}} {{>recordFieldEncoder}} {{/allVars}}{{#vendorExtensions.discriminatorName}} , ( "{{{vendorExtensions.discriminatorName}}}", Encode.string tag ){{/vendorExtensions.discriminatorName}} ] diff --git a/modules/openapi-generator/src/main/resources/elm/recordFieldDecoder.mustache b/modules/openapi-generator/src/main/resources/elm/recordFieldDecoder.mustache new file mode 100644 index 00000000000..9a9b7ee0856 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/elm/recordFieldDecoder.mustache @@ -0,0 +1 @@ +{{#required}}required{{/required}}{{^required}}optional{{/required}} "{{baseName}}" {{^required}}{{^isNullable}}(Decode.nullable {{/isNullable}}{{/required}}{{>recordFieldValueDecoder}}{{^required}}{{^isNullable}}) {{{defaultValue}}}{{/isNullable}}{{/required}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/elm/recordFieldEncoder.mustache b/modules/openapi-generator/src/main/resources/elm/recordFieldEncoder.mustache new file mode 100644 index 00000000000..4bfef791c48 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/elm/recordFieldEncoder.mustache @@ -0,0 +1 @@ +( "{{baseName}}", {{#discriminatorValue}}Encode.string "{{discriminatorValue}}"{{/discriminatorValue}}{{^discriminatorValue}}{{^required}}{{^isNullable}}Maybe.withDefault Encode.null (Maybe.map {{/isNullable}}{{/required}}{{>recordFieldValueEncoder}} model.{{name}}{{^required}}{{^isNullable}}){{/isNullable}}{{/required}}{{/discriminatorValue}} ) \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/elm/recordFieldType.mustache b/modules/openapi-generator/src/main/resources/elm/recordFieldType.mustache new file mode 100644 index 00000000000..bbfefae18e8 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/elm/recordFieldType.mustache @@ -0,0 +1 @@ +{{#isNullable}}(Maybe {{/isNullable}}{{#isContainer}}({{#isListContainer}}List{{/isListContainer}}{{#isMapContainer}}Dict String{{/isMapContainer}} {{#items}}{{>recordFieldType}}{{/items}}){{/isContainer}}{{^isContainer}}{{#isEnum}}{{nameInCamelCase}}{{/isEnum}}{{^isEnum}}{{dataType}}{{/isEnum}}{{/isContainer}}{{#isNullable}}){{/isNullable}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/elm/recordFieldValueDecoder.mustache b/modules/openapi-generator/src/main/resources/elm/recordFieldValueDecoder.mustache new file mode 100644 index 00000000000..03a57989f13 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/elm/recordFieldValueDecoder.mustache @@ -0,0 +1 @@ +{{#isNullable}}(Decode.nullable {{/isNullable}}{{#isContainer}}({{#isListContainer}}Decode.list{{/isListContainer}}{{#isMapContainer}}Decode.dict{{/isMapContainer}} {{#items}}{{>recordFieldValueDecoder}}{{/items}}){{/isContainer}}{{^isContainer}}{{vendorExtensions.elmDecoder}}{{/isContainer}}{{#isNullable}}) {{{defaultValue}}}{{/isNullable}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/elm/recordFieldValueEncoder.mustache b/modules/openapi-generator/src/main/resources/elm/recordFieldValueEncoder.mustache new file mode 100644 index 00000000000..88a3d811a03 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/elm/recordFieldValueEncoder.mustache @@ -0,0 +1 @@ +{{#isNullable}}Maybe.withDefault Encode.null (Maybe.map {{/isNullable}}{{#isContainer}}({{#isListContainer}}Encode.list{{#isElm018}} << List.map{{/isElm018}}{{/isListContainer}}{{#isMapContainer}}Encode.dict identity{{/isMapContainer}} {{#items}}{{>recordFieldValueEncoder}}{{/items}}{{/isContainer}}{{^isContainer}}{{vendorExtensions.elmEncoder}}{{/isContainer}}{{#isContainer}}){{/isContainer}}{{#isNullable}}){{/isNullable}} \ No newline at end of file diff --git a/samples/client/petstore/elm-0.18/.openapi-generator/VERSION b/samples/client/petstore/elm-0.18/.openapi-generator/VERSION index a6527129083..d077ffb477a 100644 --- a/samples/client/petstore/elm-0.18/.openapi-generator/VERSION +++ b/samples/client/petstore/elm-0.18/.openapi-generator/VERSION @@ -1 +1 @@ -3.3.2-SNAPSHOT \ No newline at end of file +3.3.4-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/elm/.openapi-generator/VERSION b/samples/client/petstore/elm/.openapi-generator/VERSION index a6527129083..d077ffb477a 100644 --- a/samples/client/petstore/elm/.openapi-generator/VERSION +++ b/samples/client/petstore/elm/.openapi-generator/VERSION @@ -1 +1 @@ -3.3.2-SNAPSHOT \ No newline at end of file +3.3.4-SNAPSHOT \ No newline at end of file