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