[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; 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.ArraySchema;
import io.swagger.v3.oas.models.media.Schema; 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.*;
import org.openapitools.codegen.meta.features.*; import org.openapitools.codegen.meta.features.*;
import org.openapitools.codegen.utils.ModelUtils; import org.openapitools.codegen.utils.ModelUtils;
@ -29,7 +30,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.io.File; import java.io.File;
import java.text.Collator; import java.io.IOException;
import java.io.Writer;
import java.util.*; import java.util.*;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -156,6 +158,12 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig {
supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
} }
@Override
protected ImmutableMap.Builder<String, Lambda> addMustacheLambdas() {
return super.addMustacheLambdas()
.put("removeWhitespace", new RemoveWhitespaceLambda());
}
@Override @Override
public String escapeUnsafeCharacters(String input) { public String escapeUnsafeCharacters(String input) {
return input.replace("*/", "*_/").replace("/*", "/_*"); return input.replace("*/", "*_/").replace("/*", "/_*");
@ -425,4 +433,11 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig {
} }
return super.getTypeDeclaration(p); 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}} {{/allowableValues}}
{{#lambda.camelcase}}{{^paramName}}{{classname}}{{/paramName}}{{enumName}}{{/lambda.camelcase}}Variants : List {{^paramName}}{{classname}}{{/paramName}}{{enumName}}
{{#lambda.camelcase}}{{^paramName}}{{classname}}{{/paramName}}{{enumName}}{{/lambda.camelcase}}Variants = {{#lambda.camelcase}}{{^paramName}}{{classname}}{{/paramName}}{{enumName}}{{/lambda.camelcase}}Variants =
{{#allowableValues}} {{#allowableValues}}
{{#enumVars}} {{#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}}}
-} -}
{{/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}} = {{operationId}}{{#allParams}} {{>paramName}}{{/allParams}} =
Api.request Api.request
"{{httpMethod}}" "{{httpMethod}}"

View File

@ -97,6 +97,22 @@ paths:
responses: responses:
"200": "200":
description: Default response 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: components:
schemas: schemas:
Absent: Absent:

View File

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

View File

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