From 05f5c5798ba17f7cc78d07a8c3708f950a686f3a Mon Sep 17 00:00:00 2001 From: William Cheng Date: Wed, 18 Apr 2018 17:42:38 +0800 Subject: [PATCH] Update html, dynamic-html petstore, fix example value for form parameters (#122) * update dynamic-html samples with oas2 * update dynamic-html oas3 (no change) * update html petstore (oas2) * update html petstore with oas3 * fix example value for form parameters * fix javadoc string --- bin/openapi3/dynamic-html.sh | 31 ++ bin/openapi3/html-petstore.sh | 31 ++ bin/openapi3/html2-petstore.sh | 31 ++ .../openapitools/codegen/DefaultCodegen.java | 72 ++-- .../languages/StaticHtml2Generator.java | 14 +- samples/dynamic-html/.swagger-codegen/VERSION | 2 +- .../dynamic-html/docs/assets/images/logo.png | Bin 14577 -> 5604 bytes .../dynamic-html/docs/operations/PetApi.html | 22 +- .../docs/operations/StoreApi.html | 4 +- .../dynamic-html/docs/operations/UserApi.html | 24 +- samples/html/.swagger-codegen/VERSION | 2 +- samples/html/index.html | 336 ++++++------------ .../petstore/finch/.swagger-codegen/VERSION | 2 +- .../finch/src/main/scala/DataAccessor.scala | 14 +- .../main/scala/io/swagger/apis/PetApi.scala | 8 +- .../main/scala/io/swagger/apis/StoreApi.scala | 4 +- .../main/scala/io/swagger/apis/UserApi.scala | 16 +- 17 files changed, 299 insertions(+), 314 deletions(-) create mode 100755 bin/openapi3/dynamic-html.sh create mode 100755 bin/openapi3/html-petstore.sh create mode 100755 bin/openapi3/html2-petstore.sh diff --git a/bin/openapi3/dynamic-html.sh b/bin/openapi3/dynamic-html.sh new file mode 100755 index 00000000000..8912d7917cc --- /dev/null +++ b/bin/openapi3/dynamic-html.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +SCRIPT="$0" + +while [ -h "$SCRIPT" ] ; do + ls=`ls -ld "$SCRIPT"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + SCRIPT="$link" + else + SCRIPT=`dirname "$SCRIPT"`/"$link" + fi +done + +if [ ! -d "${APP_DIR}" ]; then + APP_DIR=`dirname "$SCRIPT"`/.. + APP_DIR=`cd "${APP_DIR}"; pwd` +fi + +executable="./modules/openapi-generator-cli/target/openapi-generator-cli.jar" + +if [ ! -f "$executable" ] +then + mvn clean package +fi + +# if you've executed sbt assembly previously it will use that instead. +export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" +ags="$@ generate -i modules/openapi-generator/src/test/resources/3_0/petstore.yaml -l dynamic-html -o samples/dynamic-html" + +java $JAVA_OPTS -jar $executable $ags diff --git a/bin/openapi3/html-petstore.sh b/bin/openapi3/html-petstore.sh new file mode 100755 index 00000000000..b67ac005e84 --- /dev/null +++ b/bin/openapi3/html-petstore.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +SCRIPT="$0" + +while [ -h "$SCRIPT" ] ; do + ls=`ls -ld "$SCRIPT"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + SCRIPT="$link" + else + SCRIPT=`dirname "$SCRIPT"`/"$link" + fi +done + +if [ ! -d "${APP_DIR}" ]; then + APP_DIR=`dirname "$SCRIPT"`/.. + APP_DIR=`cd "${APP_DIR}"; pwd` +fi + +executable="./modules/openapi-generator-cli/target/openapi-generator-cli.jar" + +if [ ! -f "$executable" ] +then + mvn clean package +fi + +# if you've executed sbt assembly previously it will use that instead. +export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" +ags="$@ generate -i modules/openapi-generator/src/test/resources/3_0/petstore.yaml -l html -o samples/html" + +java $JAVA_OPTS -jar $executable $ags diff --git a/bin/openapi3/html2-petstore.sh b/bin/openapi3/html2-petstore.sh new file mode 100755 index 00000000000..eb796be4a15 --- /dev/null +++ b/bin/openapi3/html2-petstore.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +SCRIPT="$0" + +while [ -h "$SCRIPT" ] ; do + ls=`ls -ld "$SCRIPT"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + SCRIPT="$link" + else + SCRIPT=`dirname "$SCRIPT"`/"$link" + fi +done + +if [ ! -d "${APP_DIR}" ]; then + APP_DIR=`dirname "$SCRIPT"`/.. + APP_DIR=`cd "${APP_DIR}"; pwd` +fi + +executable="./modules/openapi-generator-cli/target/openapi-generator-cli.jar" + +if [ ! -f "$executable" ] +then + mvn clean package +fi + +# if you've executed sbt assembly previously it will use that instead. +export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" +ags="$@ generate -i modules/openapi-generator/src/test/resources/3_0/petstore.yaml -l html2 -o samples/html2 --additional-properties hideGenerationTimestamp=true" + +java $JAVA_OPTS -jar $executable $ags diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index 7f2d35fd160..bdd5f7f68cf 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -1022,9 +1022,40 @@ public class DefaultCodegen implements CodegenConfig { /** * Return the example value of the parameter. * - * @param p Codegen parameter + * @param codegenParameter Codegen parameter */ - public void setParameterExampleValue(CodegenParameter p) { + public void setParameterExampleValue(CodegenParameter codegenParameter) { + + // set the example value + // if not specified in x-example, generate a default value + // TODO need to revise how to obtain the example value + if (codegenParameter.vendorExtensions != null && codegenParameter.vendorExtensions.containsKey("x-example")) { + codegenParameter.example = Json.pretty(codegenParameter.vendorExtensions.get("x-example")); + } else if (Boolean.TRUE.equals(codegenParameter.isBoolean)) { + codegenParameter.example = "true"; + } else if (Boolean.TRUE.equals(codegenParameter.isLong)) { + codegenParameter.example = "789"; + } else if (Boolean.TRUE.equals(codegenParameter.isInteger)) { + codegenParameter.example = "56"; + } else if (Boolean.TRUE.equals(codegenParameter.isFloat)) { + codegenParameter.example = "3.4"; + } else if (Boolean.TRUE.equals(codegenParameter.isDouble)) { + codegenParameter.example = "1.2"; + } else if (Boolean.TRUE.equals(codegenParameter.isBinary)) { + codegenParameter.example = "BINARY_DATA_HERE"; + } else if (Boolean.TRUE.equals(codegenParameter.isByteArray)) { + codegenParameter.example = "BYTE_ARRAY_DATA_HERE"; + } else if (Boolean.TRUE.equals(codegenParameter.isFile)) { + codegenParameter.example = "/path/to/file.txt"; + } else if (Boolean.TRUE.equals(codegenParameter.isDate)) { + codegenParameter.example = "2013-10-20"; + } else if (Boolean.TRUE.equals(codegenParameter.isDateTime)) { + codegenParameter.example = "2013-10-20T19:20:30+01:00"; + } else if (Boolean.TRUE.equals(codegenParameter.isUuid)) { + codegenParameter.example = "38400000-8cf0-11bd-b23e-10b96e4ef00d"; + } else if (Boolean.TRUE.equals(codegenParameter.isString)) { + codegenParameter.example = codegenParameter.paramName + "_example"; + } } @@ -1360,7 +1391,7 @@ public class DefaultCodegen implements CodegenConfig { allProperties = new LinkedHashMap(); allRequired = new ArrayList(); m.allVars = new ArrayList(); - if(composed.getAllOf() != null) { + if (composed.getAllOf() != null) { int modelImplCnt = 0; // only one inline object allowed in a ComposedModel for (Schema innerModel : composed.getAllOf()) { if (m.discriminator == null) { @@ -2345,7 +2376,7 @@ public class DefaultCodegen implements CodegenConfig { ArraySchema as = (ArraySchema) responseSchema; CodegenProperty innerProperty = fromProperty("response", as.getItems()); CodegenProperty innerCp = innerProperty; - while(innerCp != null) { + while (innerCp != null) { r.baseType = innerCp.baseType; innerCp = innerCp.items; } @@ -2683,39 +2714,6 @@ public class DefaultCodegen implements CodegenConfig { LOGGER.warn("Unknown parameter type: " + parameter.getName()); } - // set the example value - // if not specified in x-example, generate a default value - // TODO need to revise how to obtain the example value - if (codegenParameter.vendorExtensions != null && codegenParameter.vendorExtensions.containsKey("x-example")) { - codegenParameter.example = Json.pretty(codegenParameter.vendorExtensions.get("x-example")); - } else if (Boolean.TRUE.equals(codegenParameter.isString)) { - codegenParameter.example = codegenParameter.paramName + "_example"; - } else if (Boolean.TRUE.equals(codegenParameter.isBoolean)) { - codegenParameter.example = "true"; - } else if (Boolean.TRUE.equals(codegenParameter.isLong)) { - codegenParameter.example = "789"; - } else if (Boolean.TRUE.equals(codegenParameter.isInteger)) { - codegenParameter.example = "56"; - } else if (Boolean.TRUE.equals(codegenParameter.isFloat)) { - codegenParameter.example = "3.4"; - } else if (Boolean.TRUE.equals(codegenParameter.isDouble)) { - codegenParameter.example = "1.2"; - } else if (Boolean.TRUE.equals(codegenParameter.isBinary)) { - codegenParameter.example = "BINARY_DATA_HERE"; - } else if (Boolean.TRUE.equals(codegenParameter.isByteArray)) { - codegenParameter.example = "B"; - } else if (Boolean.TRUE.equals(codegenParameter.isFile)) { - codegenParameter.example = "/path/to/file.txt"; - } else if (Boolean.TRUE.equals(codegenParameter.isDate)) { - codegenParameter.example = "2013-10-20"; - } else if (Boolean.TRUE.equals(codegenParameter.isDateTime)) { - codegenParameter.example = "2013-10-20T19:20:30+01:00"; - } else if (Boolean.TRUE.equals(codegenParameter.isUuid)) { - codegenParameter.example = "38400000-8cf0-11bd-b23e-10b96e4ef00d"; - } else if (Boolean.TRUE.equals(codegenParameter.isFile)) { - codegenParameter.example = "/path/to/file.txt"; - } - // set the parameter excample value // should be overridden by lang codegen setParameterExampleValue(codegenParameter); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/StaticHtml2Generator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/StaticHtml2Generator.java index 19319738245..231d5ab1a17 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/StaticHtml2Generator.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/StaticHtml2Generator.java @@ -60,7 +60,7 @@ public class StaticHtml2Generator extends DefaultCodegen implements CodegenConfi cliOptions.add(new CliOption(CodegenConstants.GROUP_ID, CodegenConstants.GROUP_ID_DESC)); cliOptions.add(new CliOption(CodegenConstants.ARTIFACT_ID, CodegenConstants.ARTIFACT_ID_DESC)); cliOptions.add(new CliOption(CodegenConstants.ARTIFACT_VERSION, CodegenConstants.ARTIFACT_VERSION_DESC)); - + additionalProperties.put("appName", "Swagger Sample"); additionalProperties.put("appDescription", "A sample swagger server"); additionalProperties.put("infoUrl", "https://helloreverb.com"); @@ -123,8 +123,8 @@ public class StaticHtml2Generator extends DefaultCodegen implements CodegenConfi List operationList = (List) operations.get("operation"); for (CodegenOperation op : operationList) { op.httpMethod = op.httpMethod.toLowerCase(); - for (CodegenResponse response : op.responses){ - if ("0".equals(response.code)){ + for (CodegenResponse response : op.responses) { + if ("0".equals(response.code)) { response.code = "default"; } } @@ -202,7 +202,7 @@ public class StaticHtml2Generator extends DefaultCodegen implements CodegenConfi /** * Parse Markdown to HTML for the main "Description" attribute * - * @param swagger The base object containing the global description through "Info" class + * @param openAPI The base object containing the global description through "Info" class * @return Void */ private void preparHtmlForGlobalDescription(OpenAPI openAPI) { @@ -213,7 +213,7 @@ public class StaticHtml2Generator extends DefaultCodegen implements CodegenConfi String currentDescription = openAPI.getInfo().getDescription(); if (currentDescription != null && !currentDescription.isEmpty()) { Markdown markInstance = new Markdown(); - openAPI.getInfo().setDescription( markInstance.toHtml(currentDescription) ); + openAPI.getInfo().setDescription(markInstance.toHtml(currentDescription)); } else { LOGGER.error("OpenAPI object description is empty [" + openAPI.getInfo().getTitle() + "]"); } @@ -227,7 +227,7 @@ public class StaticHtml2Generator extends DefaultCodegen implements CodegenConfi */ public List postProcessParameterEnum(List parameterList) { String enumFormatted = ""; - for(CodegenParameter parameter : parameterList) { + for (CodegenParameter parameter : parameterList) { if (parameter.isEnum) { for (int i = 0; i < parameter._enum.size(); i++) { String spacer = (i == (parameter._enum.size() - 1)) ? " " : ", "; @@ -268,5 +268,5 @@ public class StaticHtml2Generator extends DefaultCodegen implements CodegenConfi public String escapeUnsafeCharacters(String input) { // just return the original string return input; - } + } } diff --git a/samples/dynamic-html/.swagger-codegen/VERSION b/samples/dynamic-html/.swagger-codegen/VERSION index 7fea99011a6..096bf47efe3 100644 --- a/samples/dynamic-html/.swagger-codegen/VERSION +++ b/samples/dynamic-html/.swagger-codegen/VERSION @@ -1 +1 @@ -2.2.3-SNAPSHOT \ No newline at end of file +3.0.0-SNAPSHOT \ No newline at end of file diff --git a/samples/dynamic-html/docs/assets/images/logo.png b/samples/dynamic-html/docs/assets/images/logo.png index 209e5a473fc0fcb6dcda9eb4cb660f72008929fd..6b704e25f99261596b06998a19ff9ee8efbbce79 100644 GIT binary patch literal 5604 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

-

+

URL

http://petstore.swagger.io/v2/pet

HTTP Method

@@ -20,7 +20,7 @@ Body: - body + Pet Pet(Pet)

Pet object that needs to be added to the store

@@ -29,7 +29,7 @@

deletePet


-

+

URL

http://petstore.swagger.io/v2/pet/{petId}

HTTP Method

@@ -136,7 +136,7 @@

updatePet


-

+

URL

http://petstore.swagger.io/v2/pet

HTTP Method

@@ -151,7 +151,7 @@ Body: - body + Pet Pet(Pet)

Pet object that needs to be added to the store

@@ -160,7 +160,7 @@

updatePetWithForm


-

+

URL

http://petstore.swagger.io/v2/pet/{petId}

HTTP Method

@@ -187,7 +187,7 @@ name - String + String(string)

Updated name of the pet

@@ -198,7 +198,7 @@ status - String + String(string)

Updated status of the pet

@@ -206,7 +206,7 @@

uploadFile


-

+

URL

http://petstore.swagger.io/v2/pet/{petId}/uploadImage

HTTP Method

@@ -233,7 +233,7 @@ additionalMetadata - String + String(string)

Additional data to pass to server

@@ -244,7 +244,7 @@ file - File + File(file)

file to upload

diff --git a/samples/dynamic-html/docs/operations/StoreApi.html b/samples/dynamic-html/docs/operations/StoreApi.html index 4d4c7eeed50..cb880712d31 100644 --- a/samples/dynamic-html/docs/operations/StoreApi.html +++ b/samples/dynamic-html/docs/operations/StoreApi.html @@ -66,7 +66,7 @@

placeOrder


-

+

URL

http://petstore.swagger.io/v2/store/order

HTTP Method

@@ -81,7 +81,7 @@ Body: - body + Order Order(Order)

order placed for purchasing the pet

diff --git a/samples/dynamic-html/docs/operations/UserApi.html b/samples/dynamic-html/docs/operations/UserApi.html index cdd84feedac..bd2447afcd6 100644 --- a/samples/dynamic-html/docs/operations/UserApi.html +++ b/samples/dynamic-html/docs/operations/UserApi.html @@ -20,7 +20,7 @@ Body: - body + User User(User)

Created user object

@@ -29,7 +29,7 @@

createUsersWithArrayInput


-

+

URL

http://petstore.swagger.io/v2/user/createWithArray

HTTP Method

@@ -44,8 +44,8 @@ Body: - body - List(User) + array + List(array)

List of user object

@@ -53,7 +53,7 @@

createUsersWithListInput


-

+

URL

http://petstore.swagger.io/v2/user/createWithList

HTTP Method

@@ -68,8 +68,8 @@ Body: - body - List(User) + array + List(array)

List of user object

@@ -101,7 +101,7 @@

getUserByName


-

+

URL

http://petstore.swagger.io/v2/user/{username}

HTTP Method

@@ -119,13 +119,13 @@ username String -

The name that needs to be fetched. Use user1 for testing.

+

The name that needs to be fetched. Use user1 for testing.

loginUser


-

+

URL

http://petstore.swagger.io/v2/user/login

HTTP Method

@@ -160,7 +160,7 @@

logoutUser


-

+

URL

http://petstore.swagger.io/v2/user/logout

HTTP Method

@@ -199,7 +199,7 @@ Body: - body + User User(User)

Updated user object

diff --git a/samples/html/.swagger-codegen/VERSION b/samples/html/.swagger-codegen/VERSION index 855ff9501eb..096bf47efe3 100644 --- a/samples/html/.swagger-codegen/VERSION +++ b/samples/html/.swagger-codegen/VERSION @@ -1 +1 @@ -2.4.0-SNAPSHOT \ No newline at end of file +3.0.0-SNAPSHOT \ No newline at end of file diff --git a/samples/html/index.html b/samples/html/index.html index b38b66a92d3..8ad459e8c73 100644 --- a/samples/html/index.html +++ b/samples/html/index.html @@ -237,18 +237,12 @@ font-style: italic;
-

Consumes

- This API call consumes the following media types via the Content-Type request header: -
    -
  • application/json
  • -
  • application/xml
  • -

Request body

-
body Pet (required)
+
Pet Pet (required)
-
Body Parameter — Pet object that needs to be added to the store
+
Body Parameter
@@ -259,13 +253,6 @@ font-style: italic; -

Produces

- This API call produces the following media types according to the Accept request header; - the media type will be conveyed by the Content-Type response header. -
    -
  • application/xml
  • -
  • application/json
  • -

Responses

405

@@ -300,13 +287,6 @@ font-style: italic; -

Produces

- This API call produces the following media types according to the Accept request header; - the media type will be conveyed by the Content-Type response header. -
    -
  • application/xml
  • -
  • application/json
  • -

Responses

400

@@ -341,6 +321,25 @@ font-style: italic; +

Example data

+
Content-Type: application/json
+
{
+  "photoUrls" : [ "photoUrls", "photoUrls" ],
+  "name" : "doggie",
+  "id" : 0,
+  "category" : {
+    "name" : "name",
+    "id" : 6
+  },
+  "tags" : [ {
+    "name" : "name",
+    "id" : 1
+  }, {
+    "name" : "name",
+    "id" : 1
+  } ],
+  "status" : "available"
+}

Example data

Content-Type: application/xml

@@ -353,41 +352,6 @@ font-style: italic;
   
   aeiou
 
-

Example data

-
Content-Type: application/json
-
[ {
-  "photoUrls" : [ "photoUrls", "photoUrls" ],
-  "name" : "doggie",
-  "id" : 0,
-  "category" : {
-    "name" : "name",
-    "id" : 6
-  },
-  "tags" : [ {
-    "name" : "name",
-    "id" : 1
-  }, {
-    "name" : "name",
-    "id" : 1
-  } ],
-  "status" : "available"
-}, {
-  "photoUrls" : [ "photoUrls", "photoUrls" ],
-  "name" : "doggie",
-  "id" : 0,
-  "category" : {
-    "name" : "name",
-    "id" : 6
-  },
-  "tags" : [ {
-    "name" : "name",
-    "id" : 1
-  }, {
-    "name" : "name",
-    "id" : 1
-  } ],
-  "status" : "available"
-} ]

Produces

This API call produces the following media types according to the Accept request header; @@ -433,6 +397,25 @@ font-style: italic; +

Example data

+
Content-Type: application/json
+
{
+  "photoUrls" : [ "photoUrls", "photoUrls" ],
+  "name" : "doggie",
+  "id" : 0,
+  "category" : {
+    "name" : "name",
+    "id" : 6
+  },
+  "tags" : [ {
+    "name" : "name",
+    "id" : 1
+  }, {
+    "name" : "name",
+    "id" : 1
+  } ],
+  "status" : "available"
+}

Example data

Content-Type: application/xml

@@ -445,41 +428,6 @@ font-style: italic;
   
   aeiou
 
-

Example data

-
Content-Type: application/json
-
[ {
-  "photoUrls" : [ "photoUrls", "photoUrls" ],
-  "name" : "doggie",
-  "id" : 0,
-  "category" : {
-    "name" : "name",
-    "id" : 6
-  },
-  "tags" : [ {
-    "name" : "name",
-    "id" : 1
-  }, {
-    "name" : "name",
-    "id" : 1
-  } ],
-  "status" : "available"
-}, {
-  "photoUrls" : [ "photoUrls", "photoUrls" ],
-  "name" : "doggie",
-  "id" : 0,
-  "category" : {
-    "name" : "name",
-    "id" : 6
-  },
-  "tags" : [ {
-    "name" : "name",
-    "id" : 1
-  }, {
-    "name" : "name",
-    "id" : 1
-  } ],
-  "status" : "available"
-} ]

Produces

This API call produces the following media types according to the Accept request header; @@ -525,18 +473,6 @@ font-style: italic; -

Example data

-
Content-Type: application/xml
-

-  123456789
-  doggie
-  
-    aeiou
-  
-  
-  
-  aeiou
-

Example data

Content-Type: application/json
{
@@ -556,6 +492,18 @@ font-style: italic;
   } ],
   "status" : "available"
 }
+

Example data

+
Content-Type: application/xml
+

+  123456789
+  doggie
+  
+    aeiou
+  
+  
+  
+  aeiou
+

Produces

This API call produces the following media types according to the Accept request header; @@ -585,18 +533,12 @@ font-style: italic;
-

Consumes

- This API call consumes the following media types via the Content-Type request header: -
    -
  • application/json
  • -
  • application/xml
  • -

Request body

-
body Pet (required)
+
Pet Pet (required)
-
Body Parameter — Pet object that needs to be added to the store
+
Body Parameter
@@ -607,13 +549,6 @@ font-style: italic; -

Produces

- This API call produces the following media types according to the Accept request header; - the media type will be conveyed by the Content-Type response header. -
    -
  • application/xml
  • -
  • application/json
  • -

Responses

400

@@ -663,13 +598,6 @@ font-style: italic; -

Produces

- This API call produces the following media types according to the Accept request header; - the media type will be conveyed by the Content-Type response header. -
    -
  • application/xml
  • -
  • application/json
  • -

Responses

405

@@ -706,7 +634,7 @@ font-style: italic;
Form Parameter — Additional data to pass to server
file (optional)
-
Form Parameter — file to upload
+
Form Parameter — file to upload format: binary

Return type

@@ -762,13 +690,6 @@ font-style: italic; -

Produces

- This API call produces the following media types according to the Accept request header; - the media type will be conveyed by the Content-Type response header. -
    -
  • application/xml
  • -
  • application/json
  • -

Responses

400

@@ -846,16 +767,6 @@ font-style: italic; -

Example data

-
Content-Type: application/xml
-

-  123456789
-  123456789
-  123
-  2000-01-23T04:56:07.000Z
-  aeiou
-  true
-

Example data

Content-Type: application/json
{
@@ -866,6 +777,16 @@ font-style: italic;
   "complete" : false,
   "status" : "placed"
 }
+

Example data

+
Content-Type: application/xml
+

+  123456789
+  123456789
+  123
+  2000-01-23T04:56:07.000Z
+  aeiou
+  true
+

Produces

This API call produces the following media types according to the Accept request header; @@ -895,12 +816,17 @@ font-style: italic;
+

Consumes

+ This API call consumes the following media types via the Content-Type request header: +
    +
  • application/json
  • +

Request body

-
body Order (required)
+
Order Order (required)
-
Body Parameter — order placed for purchasing the pet
+
Body Parameter
@@ -915,16 +841,6 @@ font-style: italic; -

Example data

-
Content-Type: application/xml
-

-  123456789
-  123456789
-  123
-  2000-01-23T04:56:07.000Z
-  aeiou
-  true
-

Example data

Content-Type: application/json
{
@@ -935,6 +851,16 @@ font-style: italic;
   "complete" : false,
   "status" : "placed"
 }
+

Example data

+
Content-Type: application/xml
+

+  123456789
+  123456789
+  123
+  2000-01-23T04:56:07.000Z
+  aeiou
+  true
+

Produces

This API call produces the following media types according to the Accept request header; @@ -962,12 +888,17 @@ font-style: italic;
This can only be done by the logged in user.
+

Consumes

+ This API call consumes the following media types via the Content-Type request header: +
    +
  • application/json
  • +

Request body

-
body User (required)
+
User User (required)
-
Body Parameter — Created user object
+
Body Parameter
@@ -978,13 +909,6 @@ font-style: italic; -

Produces

- This API call produces the following media types according to the Accept request header; - the media type will be conveyed by the Content-Type response header. -
    -
  • application/xml
  • -
  • application/json
  • -

Responses

default

@@ -1003,9 +927,9 @@ font-style: italic;

Request body

-
body User (required)
+
array array (required)
-
Body Parameter — List of user object
+
Body Parameter
@@ -1016,13 +940,6 @@ font-style: italic; -

Produces

- This API call produces the following media types according to the Accept request header; - the media type will be conveyed by the Content-Type response header. -
    -
  • application/xml
  • -
  • application/json
  • -

Responses

default

@@ -1041,9 +958,9 @@ font-style: italic;

Request body

-
body User (required)
+
array array (required)
-
Body Parameter — List of user object
+
Body Parameter
@@ -1054,13 +971,6 @@ font-style: italic; -

Produces

- This API call produces the following media types according to the Accept request header; - the media type will be conveyed by the Content-Type response header. -
    -
  • application/xml
  • -
  • application/json
  • -

Responses

default

@@ -1091,13 +1001,6 @@ font-style: italic; -

Produces

- This API call produces the following media types according to the Accept request header; - the media type will be conveyed by the Content-Type response header. -
    -
  • application/xml
  • -
  • application/json
  • -

Responses

400

@@ -1135,18 +1038,6 @@ font-style: italic; -

Example data

-
Content-Type: application/xml
-

-  123456789
-  aeiou
-  aeiou
-  aeiou
-  aeiou
-  aeiou
-  aeiou
-  123
-

Example data

Content-Type: application/json
{
@@ -1159,6 +1050,18 @@ font-style: italic;
   "email" : "email",
   "username" : "username"
 }
+

Example data

+
Content-Type: application/xml
+

+  123456789
+  aeiou
+  aeiou
+  aeiou
+  aeiou
+  aeiou
+  aeiou
+  123
+

Produces

This API call produces the following media types according to the Accept request header; @@ -1209,12 +1112,12 @@ font-style: italic; -

Example data

-
Content-Type: application/xml
-
aeiou

Example data

Content-Type: application/json
""
+

Example data

+
Content-Type: application/xml
+
aeiou

Produces

This API call produces the following media types according to the Accept request header; @@ -1250,13 +1153,6 @@ font-style: italic; -

Produces

- This API call produces the following media types according to the Accept request header; - the media type will be conveyed by the Content-Type response header. -
    -
  • application/xml
  • -
  • application/json
  • -

Responses

default

@@ -1278,12 +1174,17 @@ font-style: italic;
Path Parameter — name that need to be deleted
+

Consumes

+ This API call consumes the following media types via the Content-Type request header: +
    +
  • application/json
  • +

Request body

-
body User (required)
+
User User (required)
-
Body Parameter — Updated user object
+
Body Parameter
@@ -1294,13 +1195,6 @@ font-style: italic; -

Produces

- This API call produces the following media types according to the Accept request header; - the media type will be conveyed by the Content-Type response header. -
    -
  • application/xml
  • -
  • application/json
  • -

Responses

400

diff --git a/samples/server/petstore/finch/.swagger-codegen/VERSION b/samples/server/petstore/finch/.swagger-codegen/VERSION index f9f7450d135..096bf47efe3 100644 --- a/samples/server/petstore/finch/.swagger-codegen/VERSION +++ b/samples/server/petstore/finch/.swagger-codegen/VERSION @@ -1 +1 @@ -2.3.0-SNAPSHOT \ No newline at end of file +3.0.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/finch/src/main/scala/DataAccessor.scala b/samples/server/petstore/finch/src/main/scala/DataAccessor.scala index 2fcb7429b18..3b07e157576 100644 --- a/samples/server/petstore/finch/src/main/scala/DataAccessor.scala +++ b/samples/server/petstore/finch/src/main/scala/DataAccessor.scala @@ -16,7 +16,7 @@ trait DataAccessor { * * @return A Unit */ - def Pet_addPet(body: Pet): Either[CommonError,Unit] = ??? + def Pet_addPet(pet: Pet): Either[CommonError,Unit] = ??? /** * @@ -46,7 +46,7 @@ trait DataAccessor { * * @return A Unit */ - def Pet_updatePet(body: Pet): Either[CommonError,Unit] = ??? + def Pet_updatePet(pet: Pet): Either[CommonError,Unit] = ??? /** * @@ -82,25 +82,25 @@ trait DataAccessor { * * @return A Order */ - def Store_placeOrder(body: Order): Either[CommonError,Order] = ??? + def Store_placeOrder(order: Order): Either[CommonError,Order] = ??? /** * * @return A Unit */ - def User_createUser(body: User): Either[CommonError,Unit] = ??? + def User_createUser(user: User): Either[CommonError,Unit] = ??? /** * * @return A Unit */ - def User_createUsersWithArrayInput(body: Seq[User]): Either[CommonError,Unit] = ??? + def User_createUsersWithArrayInput(seq: Seq[User]): Either[CommonError,Unit] = ??? /** * * @return A Unit */ - def User_createUsersWithListInput(body: Seq[User]): Either[CommonError,Unit] = ??? + def User_createUsersWithListInput(seq: Seq[User]): Either[CommonError,Unit] = ??? /** * @@ -130,6 +130,6 @@ trait DataAccessor { * * @return A Unit */ - def User_updateUser(username: String, body: User): Either[CommonError,Unit] = ??? + def User_updateUser(username: String, user: User): Either[CommonError,Unit] = ??? } \ No newline at end of file diff --git a/samples/server/petstore/finch/src/main/scala/io/swagger/apis/PetApi.scala b/samples/server/petstore/finch/src/main/scala/io/swagger/apis/PetApi.scala index 3f35d7b0123..86711c7fb35 100644 --- a/samples/server/petstore/finch/src/main/scala/io/swagger/apis/PetApi.scala +++ b/samples/server/petstore/finch/src/main/scala/io/swagger/apis/PetApi.scala @@ -60,8 +60,8 @@ object PetApi { * @return An endpoint representing a Unit */ private def addPet(da: DataAccessor): Endpoint[Unit] = - post("pet" :: jsonBody[Pet]) { (body: Pet) => - da.Pet_addPet(body) match { + post("pet" :: jsonBody[Pet]) { (pet: Pet) => + da.Pet_addPet(pet) match { case Left(error) => checkError(error) case Right(data) => Ok(data) } @@ -130,8 +130,8 @@ object PetApi { * @return An endpoint representing a Unit */ private def updatePet(da: DataAccessor): Endpoint[Unit] = - put("pet" :: jsonBody[Pet]) { (body: Pet) => - da.Pet_updatePet(body) match { + put("pet" :: jsonBody[Pet]) { (pet: Pet) => + da.Pet_updatePet(pet) match { case Left(error) => checkError(error) case Right(data) => Ok(data) } diff --git a/samples/server/petstore/finch/src/main/scala/io/swagger/apis/StoreApi.scala b/samples/server/petstore/finch/src/main/scala/io/swagger/apis/StoreApi.scala index c45ef8153fd..d883e2f2c0c 100644 --- a/samples/server/petstore/finch/src/main/scala/io/swagger/apis/StoreApi.scala +++ b/samples/server/petstore/finch/src/main/scala/io/swagger/apis/StoreApi.scala @@ -96,8 +96,8 @@ object StoreApi { * @return An endpoint representing a Order */ private def placeOrder(da: DataAccessor): Endpoint[Order] = - post("store" :: "order" :: jsonBody[Order]) { (body: Order) => - da.Store_placeOrder(body) match { + post("store" :: "order" :: jsonBody[Order]) { (order: Order) => + da.Store_placeOrder(order) match { case Left(error) => checkError(error) case Right(data) => Ok(data) } diff --git a/samples/server/petstore/finch/src/main/scala/io/swagger/apis/UserApi.scala b/samples/server/petstore/finch/src/main/scala/io/swagger/apis/UserApi.scala index c33effe4417..8928ad2cf54 100644 --- a/samples/server/petstore/finch/src/main/scala/io/swagger/apis/UserApi.scala +++ b/samples/server/petstore/finch/src/main/scala/io/swagger/apis/UserApi.scala @@ -59,8 +59,8 @@ object UserApi { * @return An endpoint representing a Unit */ private def createUser(da: DataAccessor): Endpoint[Unit] = - post("user" :: jsonBody[User]) { (body: User) => - da.User_createUser(body) match { + post("user" :: jsonBody[User]) { (user: User) => + da.User_createUser(user) match { case Left(error) => checkError(error) case Right(data) => Ok(data) } @@ -73,8 +73,8 @@ object UserApi { * @return An endpoint representing a Unit */ private def createUsersWithArrayInput(da: DataAccessor): Endpoint[Unit] = - post("user" :: "createWithArray" :: jsonBody[Seq[User]]) { (body: Seq[User]) => - da.User_createUsersWithArrayInput(body) match { + post("user" :: "createWithArray" :: jsonBody[Seq[User]]) { (seq: Seq[User]) => + da.User_createUsersWithArrayInput(seq) match { case Left(error) => checkError(error) case Right(data) => Ok(data) } @@ -87,8 +87,8 @@ object UserApi { * @return An endpoint representing a Unit */ private def createUsersWithListInput(da: DataAccessor): Endpoint[Unit] = - post("user" :: "createWithList" :: jsonBody[Seq[User]]) { (body: Seq[User]) => - da.User_createUsersWithListInput(body) match { + post("user" :: "createWithList" :: jsonBody[Seq[User]]) { (seq: Seq[User]) => + da.User_createUsersWithListInput(seq) match { case Left(error) => checkError(error) case Right(data) => Ok(data) } @@ -157,8 +157,8 @@ object UserApi { * @return An endpoint representing a Unit */ private def updateUser(da: DataAccessor): Endpoint[Unit] = - put("user" :: string :: jsonBody[User]) { (username: String, body: User) => - da.User_updateUser(username, body) match { + put("user" :: string :: jsonBody[User]) { (username: String, user: User) => + da.User_updateUser(username, user) match { case Left(error) => checkError(error) case Right(data) => Ok(data) }