forked from loafle/openapi-generator-original
[elm] Add support for nested Lists & Dicts (#1528)
And rename Union Types to Custom Types and Aliases to Records.
This commit is contained in:
parent
dd33434064
commit
e91d6d735d
@ -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);
|
||||
|
@ -1,4 +1,4 @@
|
||||
type {{#vendorExtensions}}{{elmUnionType}}{{/vendorExtensions}}
|
||||
type {{#vendorExtensions}}{{elmCustomType}}{{/vendorExtensions}}
|
||||
{{#allowableValues}}
|
||||
{{#enumVars}}
|
||||
{{#-first}}={{/-first}}{{^-first}}|{{/-first}} {{name}}
|
@ -1,4 +1,4 @@
|
||||
{{vendorExtensions.elmDecoder}} : Decoder {{vendorExtensions.elmUnionType}}
|
||||
{{vendorExtensions.elmDecoder}} : Decoder {{vendorExtensions.elmCustomType}}
|
||||
{{vendorExtensions.elmDecoder}} =
|
||||
Decode.string
|
||||
|> Decode.andThen
|
@ -1,4 +1,4 @@
|
||||
{{vendorExtensions.elmEncoder}} : {{vendorExtensions.elmUnionType}} -> Encode.Value
|
||||
{{vendorExtensions.elmEncoder}} : {{vendorExtensions.elmCustomType}} -> Encode.Value
|
||||
{{vendorExtensions.elmEncoder}} model =
|
||||
case model of
|
||||
{{#allowableValues}}
|
@ -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}}
|
@ -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}} )
|
@ -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}}
|
||||
|
@ -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}}
|
@ -0,0 +1,7 @@
|
||||
{{>customType}}
|
||||
|
||||
|
||||
{{>customTypeDecoder}}
|
||||
|
||||
|
||||
{{>customTypeEncoder}}
|
@ -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}}
|
@ -1,7 +0,0 @@
|
||||
{{>union}}
|
||||
|
||||
|
||||
{{>unionDecoder}}
|
||||
|
||||
|
||||
{{>unionEncoder}}
|
@ -2,5 +2,5 @@ decoder : Decoder {{classname}}
|
||||
decoder =
|
||||
{{#isElm018}}decode{{/isElm018}}{{#isElm019}}Decode.succeed{{/isElm019}} {{classname}}
|
||||
{{#allVars}}
|
||||
|> {{>fieldDecoder}}
|
||||
|> {{>recordFieldDecoder}}
|
||||
{{/allVars}}
|
@ -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}}
|
||||
]
|
@ -0,0 +1 @@
|
||||
{{#required}}required{{/required}}{{^required}}optional{{/required}} "{{baseName}}" {{^required}}{{^isNullable}}(Decode.nullable {{/isNullable}}{{/required}}{{>recordFieldValueDecoder}}{{^required}}{{^isNullable}}) {{{defaultValue}}}{{/isNullable}}{{/required}}
|
@ -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}} )
|
@ -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}}
|
@ -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}}
|
@ -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}}
|
@ -1 +1 @@
|
||||
3.3.2-SNAPSHOT
|
||||
3.3.4-SNAPSHOT
|
@ -1 +1 @@
|
||||
3.3.2-SNAPSHOT
|
||||
3.3.4-SNAPSHOT
|
Loading…
x
Reference in New Issue
Block a user