From a3dda45ae555ed103a8a6ac768a255b5702780b0 Mon Sep 17 00:00:00 2001 From: Erik Timmers Date: Tue, 18 Dec 2018 12:42:38 +0100 Subject: [PATCH] [elm] Add support for sending headers --- .../codegen/languages/ElmClientCodegen.java | 25 +++++++++++++------ .../src/main/resources/elm/api.mustache | 10 +++++--- .../client/petstore/elm/src/Request/Pet.elm | 23 +++++++++-------- .../client/petstore/elm/src/Request/Store.elm | 8 +++--- .../client/petstore/elm/src/Request/User.elm | 16 ++++++------ 5 files changed, 49 insertions(+), 33 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElmClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElmClientCodegen.java index dc9a64f5baac..13e811fa1bef 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElmClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElmClientCodegen.java @@ -447,7 +447,7 @@ public Map postProcessOperationsWithModels(Map o if (ElmVersion.ELM_018.equals(elmVersion)) { String path = op.path; for (CodegenParameter param : op.pathParams) { - final String var = paramToString(param, false, null); + final String var = paramToString("params", param, false, null); path = path.replace("{" + param.paramName + "}", "\" ++ " + var + " ++ \""); hasDateTime = hasDateTime || param.isDateTime; hasDate = hasDate || param.isDate; @@ -457,7 +457,7 @@ public Map postProcessOperationsWithModels(Map o final List paths = Arrays.asList(op.path.substring(1).split("/")); String path = paths.stream().map(str -> str.charAt(0) == '{' ? str : "\"" + str + "\"").collect(Collectors.joining(", ")); for (CodegenParameter param : op.pathParams) { - String str = paramToString(param, false, null); + String str = paramToString("params", param, false, null); path = path.replace("{" + param.paramName + "}", str); hasDateTime = hasDateTime || param.isDateTime; hasDate = hasDate || param.isDate; @@ -465,10 +465,15 @@ public Map postProcessOperationsWithModels(Map o op.path = path; final String query = op.queryParams.stream() - .map(param -> paramToString(param, true, "Url.string \"" + param.paramName + "\"")) + .map(param -> paramToString("params", param, true, "Url.string \"" + param.baseName + "\"")) .collect(Collectors.joining(", ")); op.vendorExtensions.put("query", query); - // TODO headers + + final String headers = op.headerParams.stream() + .map(param -> paramToString("headers", param, true, "Http.header \"" + param.baseName + "\"")) + .collect(Collectors.joining(", ")); + op.vendorExtensions.put("headers", headers); + // TODO cookies // TODO forms } @@ -563,8 +568,8 @@ private String toOptionalValue(String value) { return "(Just " + value + ")"; } - private String paramToString(final CodegenParameter param, final boolean useMaybe, final String maybeMapResult) { - final String paramName = (ElmVersion.ELM_018.equals(elmVersion) ? "" : "params.") + param.paramName; + private String paramToString(final String prefix, final CodegenParameter param, final boolean useMaybe, final String maybeMapResult) { + final String paramName = (ElmVersion.ELM_018.equals(elmVersion) ? "" : prefix + ".") + param.paramName; if (!useMaybe) { param.required = true; } @@ -601,11 +606,15 @@ private String paramToString(final CodegenParameter param, final boolean useMayb } String mapResult = ""; if (maybeMapResult != null) { - mapResult = maybeMapResult + (param.required ? " <|" : " <<"); + if (mapFn == "") { + mapResult = maybeMapResult; + } else { + mapResult = maybeMapResult + (param.required ? " <|" : " <<"); + } } final String just = useMaybe ? "Just (" : ""; final String justEnd = useMaybe ? ")" : ""; - return (param.required ? just : "Maybe.map") + mapResult + " " + mapFn + " " + paramName + (param.required ? justEnd : ""); + return (param.required ? just : "Maybe.map (") + mapResult + " " + mapFn + (param.required ? " " : ") ") + paramName + (param.required ? justEnd : ""); } @Override diff --git a/modules/openapi-generator/src/main/resources/elm/api.mustache b/modules/openapi-generator/src/main/resources/elm/api.mustache index 67e40a0d49ac..16c4e3a5ba57 100644 --- a/modules/openapi-generator/src/main/resources/elm/api.mustache +++ b/modules/openapi-generator/src/main/resources/elm/api.mustache @@ -21,6 +21,10 @@ basePath = -} {{/notes}} {{operationId}} : +{{#headerParams}} +{{#-first}} { {{/-first}}{{^-first}} , {{/-first}}{{paramName}} : {{^required}}Maybe ({{/required}}{{#isListContainer}}List {{/isListContainer}}{{dataType}}{{^required}}){{/required}} +{{#-last}} } -> {{/-last}} +{{/headerParams}} { onSend : Result Http.Error {{^responses}}(){{/responses}}{{#responses}}{{#-first}}{{^dataType}}(){{/dataType}}{{#isMapContainer}}(Dict.Dict String {{/isMapContainer}}{{#isListContainer}}(List {{/isListContainer}}{{dataType}}{{#isListContainer}}){{/isListContainer}}{{#isMapContainer}}){{/isMapContainer}}{{/-first}}{{/responses}} -> msg {{#enableCustomBasePaths}} , basePath : String{{/enableCustomBasePaths}} {{#enableHttpRequestTrackers}} , tracker : Maybe String{{/enableHttpRequestTrackers}} @@ -29,13 +33,13 @@ basePath = {{#queryParams}} , {{paramName}} : {{^required}}Maybe ({{/required}}{{#isListContainer}}List {{/isListContainer}}{{dataType}}{{^required}}){{/required}}{{/queryParams}} } -> Cmd msg -{{operationId}} params = +{{operationId}} {{#headerParams.0}}headers {{/headerParams.0}}params = Http.request { method = "{{httpMethod}}" - , headers = [] + , headers = {{#headerParams.0}}List.filterMap identity {{/headerParams.0}}[{{{vendorExtensions.headers}}}] , url = Url.crossOrigin {{#enableCustomBasePaths}}params.{{/enableCustomBasePaths}}basePath [{{{path}}}] - (List.filterMap identity [{{{vendorExtensions.query}}}]) + {{#queryParams.0}}(List.filterMap identity {{/queryParams.0}}[{{{vendorExtensions.query}}}]{{#queryParams.0}}){{/queryParams.0}} , body = {{#bodyParam}}{{^required}}Maybe.withDefault Http.emptyBody <| Maybe.map ({{/required}}Http.jsonBody {{#required}}<|{{/required}}{{^required}}<<{{/required}} {{vendorExtensions.elmEncoder}}{{^required}}){{/required}} params.body{{/bodyParam}}{{^bodyParam}}Http.emptyBody{{/bodyParam}} , expect = {{^responses}}Http.expectWhatever params.onSend{{/responses}}{{#responses}}{{#-first}}{{^dataType}}Http.expectWhatever params.onSend{{/dataType}}{{#dataType}}Http.expectJson params.onSend {{#isMapContainer}}(Decode.dict {{/isMapContainer}}{{#isListContainer}}(Decode.list {{/isListContainer}}{{#vendorExtensions}}{{elmDecoder}}{{/vendorExtensions}}{{#isListContainer}}){{/isListContainer}}{{#isMapContainer}}){{/isMapContainer}}{{/dataType}}{{/-first}}{{/responses}} , timeout = Just 30000 diff --git a/samples/client/petstore/elm/src/Request/Pet.elm b/samples/client/petstore/elm/src/Request/Pet.elm index d507e1666238..017cdb0a8c05 100644 --- a/samples/client/petstore/elm/src/Request/Pet.elm +++ b/samples/client/petstore/elm/src/Request/Pet.elm @@ -37,7 +37,7 @@ addPet params = , url = Url.crossOrigin basePath [ "pet" ] - (List.filterMap identity []) + [] , body = Http.jsonBody <| Pet.encode params.body , expect = Http.expectWhatever params.onSend , timeout = Just 30000 @@ -46,18 +46,21 @@ addPet params = deletePet : - { onSend : Result Http.Error () -> msg - , petId : Int + { apiKey : Maybe String } + -> + { onSend : Result Http.Error () -> msg + , petId : Int + } -> Cmd msg -deletePet params = +deletePet headers params = Http.request { method = "DELETE" - , headers = [] + , headers = List.filterMap identity [ Maybe.map (Http.header "api_key") headers.apiKey ] , url = Url.crossOrigin basePath [ "pet", String.fromInt params.petId ] - (List.filterMap identity []) + [] , body = Http.emptyBody , expect = Http.expectWhatever params.onSend , timeout = Just 30000 @@ -123,7 +126,7 @@ getPetById params = , url = Url.crossOrigin basePath [ "pet", String.fromInt params.petId ] - (List.filterMap identity []) + [] , body = Http.emptyBody , expect = Http.expectJson params.onSend Pet.decoder , timeout = Just 30000 @@ -143,7 +146,7 @@ updatePet params = , url = Url.crossOrigin basePath [ "pet" ] - (List.filterMap identity []) + [] , body = Http.jsonBody <| Pet.encode params.body , expect = Http.expectWhatever params.onSend , timeout = Just 30000 @@ -163,7 +166,7 @@ updatePetWithForm params = , url = Url.crossOrigin basePath [ "pet", String.fromInt params.petId ] - (List.filterMap identity []) + [] , body = Http.emptyBody , expect = Http.expectWhatever params.onSend , timeout = Just 30000 @@ -183,7 +186,7 @@ uploadFile params = , url = Url.crossOrigin basePath [ "pet", String.fromInt params.petId, "uploadImage" ] - (List.filterMap identity []) + [] , body = Http.emptyBody , expect = Http.expectJson params.onSend ApiResponse.decoder , timeout = Just 30000 diff --git a/samples/client/petstore/elm/src/Request/Store.elm b/samples/client/petstore/elm/src/Request/Store.elm index 69ec328cddbc..e251c075573d 100644 --- a/samples/client/petstore/elm/src/Request/Store.elm +++ b/samples/client/petstore/elm/src/Request/Store.elm @@ -38,7 +38,7 @@ deleteOrder params = , url = Url.crossOrigin basePath [ "store", "order", params.orderId ] - (List.filterMap identity []) + [] , body = Http.emptyBody , expect = Http.expectWhatever params.onSend , timeout = Just 30000 @@ -59,7 +59,7 @@ getInventory params = , url = Url.crossOrigin basePath [ "store", "inventory" ] - (List.filterMap identity []) + [] , body = Http.emptyBody , expect = Http.expectJson params.onSend (Decode.dict Decode.int) , timeout = Just 30000 @@ -81,7 +81,7 @@ getOrderById params = , url = Url.crossOrigin basePath [ "store", "order", String.fromInt params.orderId ] - (List.filterMap identity []) + [] , body = Http.emptyBody , expect = Http.expectJson params.onSend Order_.decoder , timeout = Just 30000 @@ -101,7 +101,7 @@ placeOrder params = , url = Url.crossOrigin basePath [ "store", "order" ] - (List.filterMap identity []) + [] , body = Http.jsonBody <| Order_.encode params.body , expect = Http.expectJson params.onSend Order_.decoder , timeout = Just 30000 diff --git a/samples/client/petstore/elm/src/Request/User.elm b/samples/client/petstore/elm/src/Request/User.elm index 246836c3e276..75fa422bcbde 100644 --- a/samples/client/petstore/elm/src/Request/User.elm +++ b/samples/client/petstore/elm/src/Request/User.elm @@ -38,7 +38,7 @@ createUser params = , url = Url.crossOrigin basePath [ "user" ] - (List.filterMap identity []) + [] , body = Http.jsonBody <| User.encode params.body , expect = Http.expectWhatever params.onSend , timeout = Just 30000 @@ -58,7 +58,7 @@ createUsersWithArrayInput params = , url = Url.crossOrigin basePath [ "user", "createWithArray" ] - (List.filterMap identity []) + [] , body = Http.jsonBody <| User.encode params.body , expect = Http.expectWhatever params.onSend , timeout = Just 30000 @@ -78,7 +78,7 @@ createUsersWithListInput params = , url = Url.crossOrigin basePath [ "user", "createWithList" ] - (List.filterMap identity []) + [] , body = Http.jsonBody <| User.encode params.body , expect = Http.expectWhatever params.onSend , timeout = Just 30000 @@ -100,7 +100,7 @@ deleteUser params = , url = Url.crossOrigin basePath [ "user", params.username ] - (List.filterMap identity []) + [] , body = Http.emptyBody , expect = Http.expectWhatever params.onSend , timeout = Just 30000 @@ -120,7 +120,7 @@ getUserByName params = , url = Url.crossOrigin basePath [ "user", params.username ] - (List.filterMap identity []) + [] , body = Http.emptyBody , expect = Http.expectJson params.onSend User.decoder , timeout = Just 30000 @@ -141,7 +141,7 @@ loginUser params = , url = Url.crossOrigin basePath [ "user", "login" ] - (List.filterMap identity [ Just (Url.string "username" <| params.username), Just (Url.string "password" <| params.password) ]) + (List.filterMap identity [ Just (Url.string "username" params.username), Just (Url.string "password" params.password) ]) , body = Http.emptyBody , expect = Http.expectJson params.onSend Decode.string , timeout = Just 30000 @@ -160,7 +160,7 @@ logoutUser params = , url = Url.crossOrigin basePath [ "user", "logout" ] - (List.filterMap identity []) + [] , body = Http.emptyBody , expect = Http.expectWhatever params.onSend , timeout = Just 30000 @@ -183,7 +183,7 @@ updateUser params = , url = Url.crossOrigin basePath [ "user", params.username ] - (List.filterMap identity []) + [] , body = Http.jsonBody <| User.encode params.body , expect = Http.expectWhatever params.onSend , timeout = Just 30000