From a1087f4405a83bfc52832ebb347d346ce1c896ad Mon Sep 17 00:00:00 2001 From: Erik Timmers <e.timmers@gmail.com> Date: Mon, 20 Jan 2020 10:17:32 +0100 Subject: [PATCH 1/2] [elm] Fix generating arrays of enums --- .../src/main/resources/elm/fieldDecoder.mustache | 2 +- .../src/main/resources/elm/fieldEncoder.mustache | 2 +- .../openapi-generator/src/test/resources/3_0/elm.yaml | 9 ++++++++- samples/openapi3/client/elm/src/Api/Data.elm | 6 ++++++ 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/elm/fieldDecoder.mustache b/modules/openapi-generator/src/main/resources/elm/fieldDecoder.mustache index 08364e454a3..20132a3c7ca 100644 --- a/modules/openapi-generator/src/main/resources/elm/fieldDecoder.mustache +++ b/modules/openapi-generator/src/main/resources/elm/fieldDecoder.mustache @@ -1 +1 @@ -{{#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}}{{#isModel}}{{#isDefault}}Api.Data.{{/isDefault}}{{#lambda.camelcase}}{{#isEnum}}{{classname}}{{enumName}}{{/isEnum}}{{^isEnum}}{{dataType}}{{/isEnum}}{{/lambda.camelcase}}Decoder{{/isModel}} \ No newline at end of file +{{#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}} \ 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 index 2644d33c3ad..bb3db523688 100644 --- a/modules/openapi-generator/src/main/resources/elm/fieldEncoder.mustache +++ b/modules/openapi-generator/src/main/resources/elm/fieldEncoder.mustache @@ -1 +1 @@ -{{#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}}{{#isModel}}{{#lambda.camelcase}}encode{{#isEnum}}{{classname}}{{enumName}}{{/isEnum}}{{^isEnum}}{{dataType}}{{/isEnum}}{{/lambda.camelcase}}{{/isModel}} \ No newline at end of file +{{#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}} \ No newline at end of file diff --git a/modules/openapi-generator/src/test/resources/3_0/elm.yaml b/modules/openapi-generator/src/test/resources/3_0/elm.yaml index 1ad2fe2c92a..add5576b407 100644 --- a/modules/openapi-generator/src/test/resources/3_0/elm.yaml +++ b/modules/openapi-generator/src/test/resources/3_0/elm.yaml @@ -131,6 +131,14 @@ components: type: array items: type: string + arrayOfPrimitve: + type: array + items: + $ref: "#/components/schemas/Primitive" + arrayOfEnum: + type: array + items: + $ref: "#/components/schemas/Enum" Composed: description: Composed model allOf: @@ -254,4 +262,3 @@ components: type: string in_the_middle: type: string - diff --git a/samples/openapi3/client/elm/src/Api/Data.elm b/samples/openapi3/client/elm/src/Api/Data.elm index d3f0996776b..262d799513e 100644 --- a/samples/openapi3/client/elm/src/Api/Data.elm +++ b/samples/openapi3/client/elm/src/Api/Data.elm @@ -91,6 +91,8 @@ type alias Absent = type alias Array = { array : List (String) , arrayOfArray : List (List (String)) + , arrayOfPrimitve : Maybe (List (Primitive)) + , arrayOfEnum : Maybe (List (Enum)) } @@ -293,6 +295,8 @@ encodeArrayPairs model = pairs = [ encode "array" (Json.Encode.list Json.Encode.string) model.array , encode "arrayOfArray" (Json.Encode.list (Json.Encode.list Json.Encode.string)) model.arrayOfArray + , maybeEncode "arrayOfPrimitve" (Json.Encode.list encodePrimitive) model.arrayOfPrimitve + , maybeEncode "arrayOfEnum" (Json.Encode.list encodeEnum) model.arrayOfEnum ] in pairs @@ -640,6 +644,8 @@ arrayDecoder = Json.Decode.succeed Array |> decode "array" (Json.Decode.list Json.Decode.string) |> decode "arrayOfArray" (Json.Decode.list (Json.Decode.list Json.Decode.string)) + |> maybeDecode "arrayOfPrimitve" (Json.Decode.list primitiveDecoder) Nothing + |> maybeDecode "arrayOfEnum" (Json.Decode.list enumDecoder) Nothing composedDecoder : Json.Decode.Decoder Composed -- GitLab From 51f0182a8a8026661c20d15c34d7411d196c0123 Mon Sep 17 00:00:00 2001 From: Erik Timmers <e.timmers@gmail.com> Date: Mon, 20 Jan 2020 10:27:36 +0100 Subject: [PATCH 2/2] [elm] Add suffix to operation parameters So there are no longer conflicts between parameters or parameters and operation names. --- .../src/main/resources/elm/operation.mustache | 10 +++++----- .../src/main/resources/elm/paramName.mustache | 1 + .../openapi3/client/elm/src/Api/Request/Default.elm | 12 ++++++------ .../client/elm/src/Api/Request/Primitive.elm | 4 ++-- 4 files changed, 14 insertions(+), 13 deletions(-) create mode 100644 modules/openapi-generator/src/main/resources/elm/paramName.mustache diff --git a/modules/openapi-generator/src/main/resources/elm/operation.mustache b/modules/openapi-generator/src/main/resources/elm/operation.mustache index 2c8b071c0ef..3bc12acf233 100644 --- a/modules/openapi-generator/src/main/resources/elm/operation.mustache +++ b/modules/openapi-generator/src/main/resources/elm/operation.mustache @@ -34,13 +34,13 @@ import Uuid exposing (Uuid){{/includeUuid}} -} {{/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}} {{paramName}}{{/allParams}} = +{{operationId}}{{#allParams}} {{>paramName}}{{/allParams}} = Api.request "{{httpMethod}}" "{{path}}" - [{{#pathParams}} ( "{{paramName}}", {{>paramToString}} {{paramName}} ){{#-last}} {{/-last}}{{^-last}},{{/-last}}{{/pathParams}}] - [{{#queryParams}} ( "{{baseName}}", {{#required}}Just <| {{/required}}{{^required}}Maybe.map {{/required}}{{>paramToString}} {{paramName}} ){{#-last}} {{/-last}}{{^-last}},{{/-last}}{{/queryParams}}] - [{{#headerParams}} ( "{{baseName}}", {{#required}}Just <| {{/required}}{{^required}}Maybe.map {{/required}}{{>paramToString}} {{paramName}} ){{#-last}} {{/-last}}{{^-last}},{{/-last}}{{/headerParams}}] - {{#bodyParam}}({{#required}}Just ({{/required}}{{^required}}Maybe.map {{/required}}{{#isModel}}Api.Data.{{/isModel}}{{>recordFieldValueEncoder}} {{paramName}}{{#required}}){{/required}}){{/bodyParam}}{{^bodyParam}}Nothing{{/bodyParam}} + [{{#pathParams}} ( "{{paramName}}", {{>paramToString}} {{>paramName}} ){{#-last}} {{/-last}}{{^-last}},{{/-last}}{{/pathParams}}] + [{{#queryParams}} ( "{{baseName}}", {{#required}}Just <| {{/required}}{{^required}}Maybe.map {{/required}}{{>paramToString}} {{>paramName}} ){{#-last}} {{/-last}}{{^-last}},{{/-last}}{{/queryParams}}] + [{{#headerParams}} ( "{{baseName}}", {{#required}}Just <| {{/required}}{{^required}}Maybe.map {{/required}}{{>paramToString}} {{>paramName}} ){{#-last}} {{/-last}}{{^-last}},{{/-last}}{{/headerParams}}] + {{#bodyParam}}({{#required}}Just ({{/required}}{{^required}}Maybe.map {{/required}}{{#isModel}}Api.Data.{{/isModel}}{{>recordFieldValueEncoder}} {{>paramName}}{{#required}}){{/required}}){{/bodyParam}}{{^bodyParam}}Nothing{{/bodyParam}} {{^responses}}(Json.Decode.succeed ()){{/responses}}{{#responses}}{{#isDefault}}{{^dataType}}(Json.Decode.succeed ()){{/dataType}}{{#dataType}}{{>recordFieldValueDecoder}}{{/dataType}}{{/isDefault}}{{/responses}} {{/operation}}{{/operations}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/elm/paramName.mustache b/modules/openapi-generator/src/main/resources/elm/paramName.mustache new file mode 100644 index 00000000000..52c3426a586 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/elm/paramName.mustache @@ -0,0 +1 @@ +{{paramName}}{{#isPathParam}}_path{{/isPathParam}}{{#isQueryParam}}_query{{/isQueryParam}}{{#isHeaderParam}}_header{{/isHeaderParam}}{{#isBodyParam}}_body{{/isBodyParam}} \ No newline at end of file diff --git a/samples/openapi3/client/elm/src/Api/Request/Default.elm b/samples/openapi3/client/elm/src/Api/Request/Default.elm index 75f381aa201..89b5e57b681 100644 --- a/samples/openapi3/client/elm/src/Api/Request/Default.elm +++ b/samples/openapi3/client/elm/src/Api/Request/Default.elm @@ -109,13 +109,13 @@ stringFromEnum model = headerPost : String -> Maybe Int -> Maybe HeaderType -> Api.Request String -headerPost string integer headerType = +headerPost string_header integer_header headerType_header = Api.request "POST" "/header" [] [] - [ ( "string", Just <| identity string ), ( "integer", Maybe.map String.fromInt integer ), ( "headerType", Maybe.map stringFromHeaderType headerType ) ] + [ ( "string", Just <| identity string_header ), ( "integer", Maybe.map String.fromInt integer_header ), ( "headerType", Maybe.map stringFromHeaderType headerType_header ) ] Nothing Json.Decode.string @@ -135,11 +135,11 @@ maybeGet = pathStringIntegerEnumerationGet : String -> Int -> Enumeration -> Api.Request () -pathStringIntegerEnumerationGet string integer enumeration = +pathStringIntegerEnumerationGet string_path integer_path enumeration_path = Api.request "GET" "/path/{string}/{integer}/{enumeration}" - [ ( "string", identity string ), ( "integer", String.fromInt integer ), ( "enumeration", stringFromEnumeration enumeration ) ] + [ ( "string", identity string_path ), ( "integer", String.fromInt integer_path ), ( "enumeration", stringFromEnumeration enumeration_path ) ] [] [] Nothing @@ -148,12 +148,12 @@ pathStringIntegerEnumerationGet string integer enumeration = queryGet : Maybe String -> Maybe Int -> Maybe Enum -> Api.Request () -queryGet string int enum = +queryGet string_query int_query enum_query = Api.request "GET" "/query" [] - [ ( "string", Maybe.map identity string ), ( "int", Maybe.map String.fromInt int ), ( "enum", Maybe.map stringFromEnum enum ) ] + [ ( "string", Maybe.map identity string_query ), ( "int", Maybe.map String.fromInt int_query ), ( "enum", Maybe.map stringFromEnum enum_query ) ] [] Nothing (Json.Decode.succeed ()) diff --git a/samples/openapi3/client/elm/src/Api/Request/Primitive.elm b/samples/openapi3/client/elm/src/Api/Request/Primitive.elm index f9e59dce68d..05f36eea518 100644 --- a/samples/openapi3/client/elm/src/Api/Request/Primitive.elm +++ b/samples/openapi3/client/elm/src/Api/Request/Primitive.elm @@ -27,12 +27,12 @@ import Json.Encode update : Api.Data.Primitive -> Api.Request Api.Data.Primitive -update primitive = +update primitive_body = Api.request "POST" "/data" [] [] [] - (Just (Api.Data.encodePrimitive primitive)) + (Just (Api.Data.encodePrimitive primitive_body)) Api.Data.primitiveDecoder -- GitLab