forked from loafle/openapi-generator-original
Fix Petstore example for Elm (#96)
* Add support for `additionalProperties` in operations; * Add reserved module names.
This commit is contained in:
parent
8c541a247b
commit
a5cf27b60e
@ -87,7 +87,14 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig {
|
||||
|
||||
defaultIncludes = new HashSet<>(
|
||||
Arrays.asList(
|
||||
"List")
|
||||
"Order",
|
||||
"Never",
|
||||
"List",
|
||||
"Maybe",
|
||||
"Result",
|
||||
"Program",
|
||||
"Cmd",
|
||||
"Sub")
|
||||
);
|
||||
|
||||
languageSpecificPrimitives = new HashSet<>(
|
||||
@ -158,7 +165,8 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig {
|
||||
|
||||
@Override
|
||||
public String toModelName(String name) {
|
||||
return camelize(name);
|
||||
final String modelName = camelize(name);
|
||||
return defaultIncludes.contains(modelName) ? modelName + "_" : modelName;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -262,10 +270,10 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig {
|
||||
for (Map<String, Object> mo : models) {
|
||||
CodegenModel cm = (CodegenModel) mo.get("model");
|
||||
if (cm.isEnum) {
|
||||
this.addEncoderAndDecoder(cm.vendorExtensions, cm.classname, false);
|
||||
this.addEncoderAndDecoder(cm.vendorExtensions, cm.classname, false, false);
|
||||
cm.vendorExtensions.put(X_UNION_TYPE, cm.classname);
|
||||
} else if (cm.isAlias) {
|
||||
this.addEncoderAndDecoder(cm.vendorExtensions, cm.dataType, true);
|
||||
this.addEncoderAndDecoder(cm.vendorExtensions, cm.dataType, false, true);
|
||||
}
|
||||
|
||||
List<ElmImport> elmImports = new ArrayList<>();
|
||||
@ -380,7 +388,7 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig {
|
||||
}
|
||||
op.path = ("\"" + path + "\"").replaceAll(" \\+\\+ \"\"", "");
|
||||
|
||||
if (op.bodyParam != null) {
|
||||
if (op.bodyParam != null && !op.bodyParam.isPrimitiveType && !op.bodyParam.isMapContainer) {
|
||||
final String encoder = (String) op.bodyParam.vendorExtensions.get(X_ENCODER);
|
||||
if (encoder != null) {
|
||||
if (!dependencies.containsKey(op.bodyParam.dataType)) {
|
||||
@ -390,6 +398,9 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig {
|
||||
}
|
||||
}
|
||||
for (CodegenResponse resp : op.responses) {
|
||||
if (resp.primitiveType || resp.isMapContainer) {
|
||||
continue;
|
||||
}
|
||||
final String decoder = (String) resp.vendorExtensions.get(X_DECODER);
|
||||
if (decoder != null) {
|
||||
if (!dependencies.containsKey(resp.dataType)) {
|
||||
@ -486,7 +497,7 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig {
|
||||
final CodegenProperty property = super.fromProperty(name, p);
|
||||
|
||||
final String dataType = property.isEnum ? property.baseName : property.datatype;
|
||||
addEncoderAndDecoder(property.vendorExtensions, dataType, property.isPrimitiveType && !property.isEnum);
|
||||
addEncoderAndDecoder(property.vendorExtensions, dataType, property.isMapContainer, property.isPrimitiveType && !property.isEnum);
|
||||
if (property.isEnum) {
|
||||
property.vendorExtensions.put(X_UNION_TYPE, property.datatypeWithEnum);
|
||||
}
|
||||
@ -498,17 +509,24 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig {
|
||||
public CodegenResponse fromResponse(String responseCode, ApiResponse resp) {
|
||||
final CodegenResponse response = super.fromResponse(responseCode, resp);
|
||||
if (response.dataType != null) {
|
||||
addEncoderAndDecoder(response.vendorExtensions, response.dataType, response.primitiveType);
|
||||
addEncoderAndDecoder(response.vendorExtensions, response.dataType, response.isMapContainer, response.primitiveType);
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postProcessParameter(CodegenParameter parameter) {
|
||||
addEncoderAndDecoder(parameter.vendorExtensions, parameter.dataType, parameter.isPrimitiveType);
|
||||
addEncoderAndDecoder(parameter.vendorExtensions, parameter.dataType, parameter.isMapContainer, parameter.isPrimitiveType);
|
||||
}
|
||||
|
||||
private void addEncoderAndDecoder(Map<String, Object> vendorExtensions, String dataType, Boolean isPrimitiveType) {
|
||||
private boolean isPrimitiveDataType(String dataType) {
|
||||
return languageSpecificPrimitives.contains(dataType);
|
||||
}
|
||||
|
||||
private void addEncoderAndDecoder(Map<String, Object> vendorExtensions, String dataType, Boolean isMapContainer, Boolean isPrimitiveType) {
|
||||
if (isMapContainer) {
|
||||
isPrimitiveType = isPrimitiveDataType(dataType);
|
||||
}
|
||||
final String baseName = camelize(dataType, true);
|
||||
String encoderName;
|
||||
String decoderName;
|
||||
|
@ -4,7 +4,8 @@ import Json.Decode as Decode exposing (Decoder)
|
||||
import Json.Encode as Encode
|
||||
|
||||
|
||||
type alias Byte = String
|
||||
type alias Byte =
|
||||
String
|
||||
|
||||
|
||||
byteDecoder : Decoder Byte
|
||||
|
@ -2,7 +2,8 @@
|
||||
|
||||
module Request.{{classname}} exposing ({{#operations}}{{#operation}}{{^-first}}, {{/-first}}{{operationId}}{{/operation}}{{/operations}})
|
||||
|
||||
{{>imports}}import Http
|
||||
{{>imports}}import Dict
|
||||
import Http
|
||||
import Json.Decode as Decode
|
||||
|
||||
|
||||
@ -16,13 +17,13 @@ basePath =
|
||||
{-
|
||||
{{notes}}
|
||||
-}
|
||||
{{operationId}} : {{#pathParams}}{{dataType}} -> {{/pathParams}}{{#bodyParam}}{{dataType}} -> {{/bodyParam}}Http.Request {{#responses}}{{#-first}}{{^dataType}}(){{/dataType}}{{#isListContainer}}(List {{/isListContainer}}{{dataType}}{{#isListContainer}}){{/isListContainer}}{{/-first}}{{/responses}}
|
||||
{{operationId}} : {{#pathParams}}{{dataType}} -> {{/pathParams}}{{#bodyParam}}{{dataType}} -> {{/bodyParam}}Http.Request {{#responses}}{{#-first}}{{^dataType}}(){{/dataType}}{{#isMapContainer}}(Dict.Dict String {{/isMapContainer}}{{#isListContainer}}(List {{/isListContainer}}{{dataType}}{{#isListContainer}}){{/isListContainer}}{{#isMapContainer}}){{/isMapContainer}}{{/-first}}{{/responses}}
|
||||
{{operationId}} {{#pathParams}}{{paramName}} {{/pathParams}}{{#bodyParam}}model {{/bodyParam}}=
|
||||
{ method = "{{httpMethod}}"
|
||||
, url = basePath ++ {{{path}}}
|
||||
, headers = []
|
||||
, body = {{#bodyParam}}Http.jsonBody <| {{vendorExtensions.x-encoder}} model{{/bodyParam}}{{^bodyParam}}Http.emptyBody{{/bodyParam}}
|
||||
, expect = {{#responses}}{{#-first}}{{^dataType}}Http.expectStringResponse (\_ -> Ok ()){{/dataType}}{{#dataType}}Http.expectJson {{#isListContainer}}(Decode.list {{/isListContainer}}{{#vendorExtensions}}{{x-decoder}}{{/vendorExtensions}}{{#isListContainer}}){{/isListContainer}}{{/dataType}}{{/-first}}{{/responses}}
|
||||
, expect = {{#responses}}{{#-first}}{{^dataType}}Http.expectStringResponse (\_ -> Ok ()){{/dataType}}{{#dataType}}Http.expectJson {{#isMapContainer}}(Decode.dict {{/isMapContainer}}{{#isListContainer}}(Decode.list {{/isListContainer}}{{#vendorExtensions}}{{x-decoder}}{{/vendorExtensions}}{{#isListContainer}}){{/isListContainer}}{{#isMapContainer}}){{/isMapContainer}}{{/dataType}}{{/-first}}{{/responses}}
|
||||
, timeout = Just 30000
|
||||
, withCredentials = False
|
||||
}
|
||||
|
@ -1,11 +0,0 @@
|
||||
{-
|
||||
* {{{appName}}}
|
||||
* {{{appDescription}}}
|
||||
*
|
||||
* {{#version}}OpenAPI spec version: {{{version}}}{{/version}}
|
||||
* {{#infoEmail}}Contact: {{{infoEmail}}}{{/infoEmail}}
|
||||
*
|
||||
* NOTE: This file is auto generated by the swagger code generator program.
|
||||
* https://github.com/swagger-api/swagger-codegen.git
|
||||
* Do not edit manually.
|
||||
-}
|
@ -4,7 +4,8 @@ import Json.Decode as Decode exposing (Decoder)
|
||||
import Json.Encode as Encode
|
||||
|
||||
|
||||
type alias Byte = String
|
||||
type alias Byte =
|
||||
String
|
||||
|
||||
|
||||
byteDecoder : Decoder Byte
|
||||
|
@ -11,7 +11,7 @@
|
||||
-}
|
||||
|
||||
|
||||
module Data.Order exposing (Order, Status(..), orderDecoder, orderEncoder)
|
||||
module Data.Order_ exposing (Order_, Status(..), orderDecoder, orderEncoder)
|
||||
|
||||
import DateTime exposing (DateTime, dateTimeDecoder, dateTimeEncoder)
|
||||
import Json.Decode as Decode exposing (Decoder)
|
||||
@ -25,7 +25,7 @@ import Maybe exposing (map, withDefault)
|
||||
-}
|
||||
|
||||
|
||||
type alias Order =
|
||||
type alias Order_ =
|
||||
{ id : Maybe Int
|
||||
, petId : Maybe Int
|
||||
, quantity : Maybe Int
|
||||
@ -42,9 +42,9 @@ type Status
|
||||
|
||||
|
||||
|
||||
orderDecoder : Decoder Order
|
||||
orderDecoder : Decoder Order_
|
||||
orderDecoder =
|
||||
decode Order
|
||||
decode Order_
|
||||
|> optional "id" (Decode.nullable Decode.int) Nothing
|
||||
|> optional "petId" (Decode.nullable Decode.int) Nothing
|
||||
|> optional "quantity" (Decode.nullable Decode.int) Nothing
|
||||
@ -54,7 +54,7 @@ orderDecoder =
|
||||
|
||||
|
||||
|
||||
orderEncoder : Order -> Encode.Value
|
||||
orderEncoder : Order_ -> Encode.Value
|
||||
orderEncoder model =
|
||||
Encode.object
|
||||
[ ( "id", withDefault Encode.null (map Encode.int model.id) )
|
@ -15,6 +15,7 @@ module Request.Pet exposing (addPet, deletePet, findPetsByStatus, findPetsByTags
|
||||
|
||||
import Data.Pet exposing (Pet, petDecoder, petEncoder)
|
||||
import Data.ApiResponse exposing (ApiResponse, apiResponseDecoder)
|
||||
import Dict
|
||||
import Http
|
||||
import Json.Decode as Decode
|
||||
|
||||
|
@ -13,8 +13,8 @@
|
||||
|
||||
module Request.Store exposing (deleteOrder, getInventory, getOrderById, placeOrder)
|
||||
|
||||
import Data.Order exposing (Order, orderDecoder, orderEncoder)
|
||||
import Data.Int exposing (Int, intDecoder)
|
||||
import Data.Order_ exposing (Order_, orderDecoder, orderEncoder)
|
||||
import Dict
|
||||
import Http
|
||||
import Json.Decode as Decode
|
||||
|
||||
@ -43,13 +43,13 @@ deleteOrder orderId =
|
||||
{-
|
||||
Returns a map of status codes to quantities
|
||||
-}
|
||||
getInventory : Http.Request Int
|
||||
getInventory : Http.Request (Dict.Dict String Int)
|
||||
getInventory =
|
||||
{ method = "GET"
|
||||
, url = basePath ++ "/store/inventory"
|
||||
, headers = []
|
||||
, body = Http.emptyBody
|
||||
, expect = Http.expectJson intDecoder
|
||||
, expect = Http.expectJson (Decode.dict Decode.int)
|
||||
, timeout = Just 30000
|
||||
, withCredentials = False
|
||||
}
|
||||
@ -59,7 +59,7 @@ getInventory =
|
||||
{-
|
||||
For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions
|
||||
-}
|
||||
getOrderById : Int -> Http.Request Order
|
||||
getOrderById : Int -> Http.Request Order_
|
||||
getOrderById orderId =
|
||||
{ method = "GET"
|
||||
, url = basePath ++ "/store/order/" ++ toString orderId
|
||||
@ -75,7 +75,7 @@ getOrderById orderId =
|
||||
{-
|
||||
|
||||
-}
|
||||
placeOrder : Order -> Http.Request Order
|
||||
placeOrder : Order_ -> Http.Request Order_
|
||||
placeOrder model =
|
||||
{ method = "POST"
|
||||
, url = basePath ++ "/store/order"
|
||||
|
@ -14,7 +14,7 @@
|
||||
module Request.User exposing (createUser, createUsersWithArrayInput, createUsersWithListInput, deleteUser, getUserByName, loginUser, logoutUser, updateUser)
|
||||
|
||||
import Data.User exposing (User, userDecoder, userEncoder)
|
||||
import Data.String exposing (Decode.string, String)
|
||||
import Dict
|
||||
import Http
|
||||
import Json.Decode as Decode
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user