[elm] Fix duplicate coder names (#5100)

* [elm] Add signature to enum variants

* [elm] Fix field encoders/decoders
This commit is contained in:
Erik Timmers 2020-01-24 11:04:00 +01:00 committed by GitHub
parent 71128f712c
commit 7e16a1f58c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 91 additions and 7 deletions

View File

@ -17,11 +17,12 @@
package org.openapitools.codegen.languages;
import com.google.common.collect.ImmutableMap;
import com.samskivert.mustache.Mustache;
import com.samskivert.mustache.Mustache.Lambda;
import com.samskivert.mustache.Template;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.responses.ApiResponse;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.*;
import org.openapitools.codegen.meta.features.*;
import org.openapitools.codegen.utils.ModelUtils;
@ -29,7 +30,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.text.Collator;
import java.io.IOException;
import java.io.Writer;
import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@ -156,6 +158,12 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig {
supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
}
@Override
protected ImmutableMap.Builder<String, Lambda> addMustacheLambdas() {
return super.addMustacheLambdas()
.put("removeWhitespace", new RemoveWhitespaceLambda());
}
@Override
public String escapeUnsafeCharacters(String input) {
return input.replace("*/", "*_/").replace("/*", "/_*");
@ -425,4 +433,11 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig {
}
return super.getTypeDeclaration(p);
}
private static class RemoveWhitespaceLambda implements Mustache.Lambda {
@Override
public void execute(final Template.Fragment fragment, final Writer writer) throws IOException {
writer.write(fragment.execute().replaceAll("\\s+", ""));
}
}
}

View File

@ -6,6 +6,7 @@ type {{^paramName}}{{classname}}{{/paramName}}{{enumName}}
{{/allowableValues}}
{{#lambda.camelcase}}{{^paramName}}{{classname}}{{/paramName}}{{enumName}}{{/lambda.camelcase}}Variants : List {{^paramName}}{{classname}}{{/paramName}}{{enumName}}
{{#lambda.camelcase}}{{^paramName}}{{classname}}{{/paramName}}{{enumName}}{{/lambda.camelcase}}Variants =
{{#allowableValues}}
{{#enumVars}}

View File

@ -1 +1,17 @@
{{#isDateTime}}Api.Time.dateTimeDecoder{{/isDateTime}}{{#isDate}}Api.Time.dateDecoder{{/isDate}}{{#isByteArray}}Json.Decode.string{{/isByteArray}}{{#isBinary}}Json.Decode.string{{/isBinary}}{{#isString}}{{^isEnum}}{{^isUuid}}Json.Decode.string{{/isUuid}}{{/isEnum}}{{/isString}}{{#isInteger}}Json.Decode.int{{/isInteger}}{{#isLong}}Json.Decode.int{{/isLong}}{{#isNumber}}Json.Decode.float{{/isNumber}}{{#isFloat}}Json.Decode.float{{/isFloat}}{{#isDouble}}Json.Decode.float{{/isDouble}}{{#isBoolean}}Json.Decode.bool{{/isBoolean}}{{#isUuid}}Uuid.decoder{{/isUuid}}{{^isString}}{{^isNumeric}}{{^isBoolean}}{{#isDefault}}Api.Data.{{/isDefault}}{{#lambda.camelcase}}{{#isEnum}}{{classname}}{{enumName}}{{/isEnum}}{{^isEnum}}{{dataType}}{{/isEnum}}{{/lambda.camelcase}}Decoder{{/isBoolean}}{{/isNumeric}}{{/isString}}
{{#lambda.removeWhitespace}}
{{#isDateTime}}Api.Time.dateTimeDecoder{{/isDateTime}}
{{#isDate}}Api.Time.dateDecoder{{/isDate}}
{{#isByteArray}}Json.Decode.string{{/isByteArray}}
{{#isBinary}}Json.Decode.string{{/isBinary}}
{{#isString}}{{^isEnum}}{{^isUuid}}Json.Decode.string{{/isUuid}}{{/isEnum}}{{/isString}}
{{#isInteger}}Json.Decode.int{{/isInteger}}
{{#isLong}}Json.Decode.int{{/isLong}}
{{#isNumber}}Json.Decode.float{{/isNumber}}
{{#isFloat}}Json.Decode.float{{/isFloat}}
{{#isDouble}}Json.Decode.float{{/isDouble}}
{{#isBoolean}}Json.Decode.bool{{/isBoolean}}
{{#isUuid}}Uuid.decoder{{/isUuid}}
{{^isDateTime}}{{^isDate}}{{^isByteArray}}{{^isBinary}}{{^isString}}{{^isNumeric}}{{^isBoolean}}{{^isUuid}}
{{#isDefault}}Api.Data.{{/isDefault}}{{#lambda.camelcase}}{{#isEnum}}{{classname}}{{enumName}}{{/isEnum}}{{^isEnum}}{{dataType}}{{/isEnum}}{{/lambda.camelcase}}Decoder
{{/isUuid}}{{/isBoolean}}{{/isNumeric}}{{/isString}}{{/isBinary}}{{/isByteArray}}{{/isDate}}{{/isDateTime}}
{{/lambda.removeWhitespace}}

View File

@ -1 +1,17 @@
{{#isDateTime}}Api.Time.encodeDateTime{{/isDateTime}}{{#isDate}}Api.Time.encodeDate{{/isDate}}{{#isByteArray}}Json.Encode.string{{/isByteArray}}{{#isBinary}}Json.Decode.string{{/isBinary}}{{#isString}}{{^isEnum}}{{^isUuid}}Json.Encode.string{{/isUuid}}{{/isEnum}}{{/isString}}{{#isInteger}}Json.Encode.int{{/isInteger}}{{#isLong}}Json.Encode.int{{/isLong}}{{#isNumber}}Json.Encode.float{{/isNumber}}{{#isFloat}}Json.Encode.float{{/isFloat}}{{#isDouble}}Json.Encode.float{{/isDouble}}{{#isBoolean}}Json.Encode.bool{{/isBoolean}}{{#isUuid}}Uuid.encode{{/isUuid}}{{^isString}}{{^isNumeric}}{{^isBoolean}}{{#lambda.camelcase}}encode{{#isEnum}}{{classname}}{{enumName}}{{/isEnum}}{{^isEnum}}{{dataType}}{{/isEnum}}{{/lambda.camelcase}}{{/isBoolean}}{{/isNumeric}}{{/isString}}
{{#lambda.removeWhitespace}}
{{#isDateTime}}Api.Time.encodeDateTime{{/isDateTime}}
{{#isDate}}Api.Time.encodeDate{{/isDate}}
{{#isByteArray}}Json.Encode.string{{/isByteArray}}
{{#isBinary}}Json.Decode.string{{/isBinary}}
{{#isString}}{{^isEnum}}{{^isUuid}}Json.Encode.string{{/isUuid}}{{/isEnum}}{{/isString}}
{{#isInteger}}Json.Encode.int{{/isInteger}}
{{#isLong}}Json.Encode.int{{/isLong}}
{{#isNumber}}Json.Encode.float{{/isNumber}}
{{#isFloat}}Json.Encode.float{{/isFloat}}
{{#isDouble}}Json.Encode.float{{/isDouble}}
{{#isBoolean}}Json.Encode.bool{{/isBoolean}}
{{#isUuid}}Uuid.encode{{/isUuid}}
{{^isDateTime}}{{^isDate}}{{^isByteArray}}{{^isBinary}}{{^isString}}{{^isNumeric}}{{^isBoolean}}{{^isUuid}}
{{#lambda.camelcase}}encode{{#isEnum}}{{classname}}{{enumName}}{{/isEnum}}{{^isEnum}}{{dataType}}{{/isEnum}}{{/lambda.camelcase}}
{{/isUuid}}{{/isBoolean}}{{/isNumeric}}{{/isString}}{{/isBinary}}{{/isByteArray}}{{/isDate}}{{/isDateTime}}
{{/lambda.removeWhitespace}}

View File

@ -33,7 +33,7 @@ import Uuid exposing (Uuid){{/includeUuid}}
{-| {{{notes}}}
-}
{{/notes}}
{{operationId}} : {{#allParams}}{{^required}}Maybe {{/required}}{{#isListContainer}}List {{/isListContainer}}{{#datatypeWithEnum}}{{.}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{#isModel}}Api.Data.{{/isModel}}{{dataType}}{{/datatypeWithEnum}} -> {{/allParams}}Api.Request {{^responses}}(){{/responses}}{{#responses}}{{#-first}}{{^dataType}}(){{/dataType}}{{#isMapContainer}}(Dict.Dict String {{/isMapContainer}}{{#isListContainer}}(List {{/isListContainer}}{{^primitiveType}}Api.Data.{{/primitiveType}}{{#items}}{{#isModel}}Api.Data.{{/isModel}}{{/items}}{{dataType}}{{#isListContainer}}){{/isListContainer}}{{#isMapContainer}}){{/isMapContainer}}{{/-first}}{{/responses}}
{{operationId}} : {{#allParams}}{{^required}}Maybe {{/required}}{{#isListContainer}}List {{/isListContainer}}{{#datatypeWithEnum}}{{.}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{#isModel}}Api.Data.{{/isModel}}{{dataType}}{{/datatypeWithEnum}} -> {{/allParams}}Api.Request {{^responses}}(){{/responses}}{{#responses}}{{#-first}}{{^dataType}}(){{/dataType}}{{#isMapContainer}}(Dict.Dict String {{/isMapContainer}}{{#isListContainer}}(List {{/isListContainer}}{{^primitiveType}}{{^isUuid}}Api.Data.{{/isUuid}}{{/primitiveType}}{{#items}}{{#isModel}}Api.Data.{{/isModel}}{{/items}}{{dataType}}{{#isListContainer}}){{/isListContainer}}{{#isMapContainer}}){{/isMapContainer}}{{/-first}}{{/responses}}
{{operationId}}{{#allParams}} {{>paramName}}{{/allParams}} =
Api.request
"{{httpMethod}}"

View File

@ -97,6 +97,22 @@ paths:
responses:
"200":
description: Default response
/uuid:
get:
parameters:
- name: value
in: query
schema:
type: string
format: uuid
responses:
"200":
description: Default response
content:
application/json:
schema:
type: string
format: uuid
components:
schemas:
Absent:

View File

@ -140,6 +140,7 @@ type Enum
| EnumBaz
enumVariants : List Enum
enumVariants =
[ EnumFoo
, EnumBar
@ -153,6 +154,7 @@ type Enumeric
| Enumeric3
enumericVariants : List Enumeric
enumericVariants =
[ Enumeric1
, Enumeric2

View File

@ -18,6 +18,7 @@ module Api.Request.Default exposing
, maybeGet
, pathStringIntegerEnumerationGet, Enumeration(..), enumerationVariants
, queryGet, Enum(..), enumVariants
, uuidGet
)
import Api
@ -26,6 +27,7 @@ import Dict
import Http
import Json.Decode
import Json.Encode
import Uuid exposing (Uuid)
type HeaderType
@ -33,6 +35,7 @@ type HeaderType
| HeaderTypeRight
headerTypeVariants : List HeaderType
headerTypeVariants =
[ HeaderTypeLeft
, HeaderTypeRight
@ -57,6 +60,7 @@ type Enumeration
| EnumerationC
enumerationVariants : List Enumeration
enumerationVariants =
[ EnumerationA
, EnumerationB
@ -85,6 +89,7 @@ type Enum
| EnumC
enumVariants : List Enum
enumVariants =
[ EnumA
, EnumB
@ -157,3 +162,16 @@ queryGet string_query int_query enum_query =
[]
Nothing
(Json.Decode.succeed ())
uuidGet : Maybe Uuid -> Api.Request Uuid
uuidGet value_query =
Api.request
"GET"
"/uuid"
[]
[ ( "value", Maybe.map Uuid.toString value_query ) ]
[]
Nothing
Uuid.decoder