diff --git a/bin/haskell-http-client-petstore.sh b/bin/haskell-http-client-petstore.sh
index ac21b66a745..f128afe3f60 100755
--- a/bin/haskell-http-client-petstore.sh
+++ b/bin/haskell-http-client-petstore.sh
@@ -28,4 +28,5 @@ fi
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
ags="$@ generate -t modules/swagger-codegen/src/main/resources/haskell-http-client -i modules/swagger-codegen/src/test/resources/2_0/petstore.yaml -l haskell-http-client -o samples/client/petstore/haskell-http-client"
+echo "java ${JAVA_OPTS} -jar ${executable} ${ags}"
java $JAVA_OPTS -jar $executable $ags
diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/HaskellHttpClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/HaskellHttpClientCodegen.java
index 5f57e100c50..a7cc41fd230 100644
--- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/HaskellHttpClientCodegen.java
+++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/HaskellHttpClientCodegen.java
@@ -42,7 +42,6 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
protected String artifactId = "swagger-haskell-http-client";
protected String artifactVersion = "1.0.0";
- protected String defaultDateTimeFormat = "%Y-%m-%dT%H:%M:%S%Q%z";
protected String defaultDateFormat = "%Y-%m-%d";
// CLI
@@ -54,6 +53,7 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
public static final String GENERATE_LENSES = "generateLenses";
public static final String GENERATE_MODEL_CONSTRUCTORS = "generateModelConstructors";
public static final String MODEL_DERIVING = "modelDeriving";
+ public static final String STRICT_FIELDS = "strictFields";
// protected String MODEL_IMPORTS = "modelImports";
// protected String MODEL_EXTENSIONS = "modelExtensions";
@@ -182,21 +182,22 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
importMapping.clear();
importMapping.put("Map", "qualified Data.Map as Map");
- cliOptions.add(new CliOption(CodegenConstants.MODEL_PACKAGE, CodegenConstants.MODEL_PACKAGE_DESC));
- cliOptions.add(new CliOption(CodegenConstants.API_PACKAGE, CodegenConstants.API_PACKAGE_DESC));
+ cliOptions.add(CliOption.newString(CodegenConstants.MODEL_PACKAGE, CodegenConstants.MODEL_PACKAGE_DESC));
+ cliOptions.add(CliOption.newString(CodegenConstants.API_PACKAGE, CodegenConstants.API_PACKAGE_DESC));
- cliOptions.add(new CliOption(ALLOW_FROMJSON_NULLS, "allow JSON Null during model decoding from JSON").defaultValue(Boolean.TRUE.toString()));
- cliOptions.add(new CliOption(ALLOW_TOJSON_NULLS, "allow emitting JSON Null during model encoding to JSON").defaultValue(Boolean.FALSE.toString()));
- cliOptions.add(new CliOption(GENERATE_LENSES, "Generate Lens optics for Models").defaultValue(Boolean.TRUE.toString()));
- cliOptions.add(new CliOption(GENERATE_MODEL_CONSTRUCTORS, "Generate smart constructors (only supply required fields) for models").defaultValue(Boolean.TRUE.toString()));
- cliOptions.add(new CliOption(GENERATE_FORM_URLENCODED_INSTANCES, "Generate FromForm/ToForm instances for models that are used by operations that produce or consume application/x-www-form-urlencoded").defaultValue(Boolean.TRUE.toString()));
+ cliOptions.add(CliOption.newBoolean(ALLOW_FROMJSON_NULLS, "allow JSON Null during model decoding from JSON").defaultValue(Boolean.TRUE.toString()));
+ cliOptions.add(CliOption.newBoolean(ALLOW_TOJSON_NULLS, "allow emitting JSON Null during model encoding to JSON").defaultValue(Boolean.FALSE.toString()));
+ cliOptions.add(CliOption.newBoolean(GENERATE_LENSES, "Generate Lens optics for Models").defaultValue(Boolean.TRUE.toString()));
+ cliOptions.add(CliOption.newBoolean(GENERATE_MODEL_CONSTRUCTORS, "Generate smart constructors (only supply required fields) for models").defaultValue(Boolean.TRUE.toString()));
+ cliOptions.add(CliOption.newBoolean(GENERATE_FORM_URLENCODED_INSTANCES, "Generate FromForm/ToForm instances for models that are used by operations that produce or consume application/x-www-form-urlencoded").defaultValue(Boolean.TRUE.toString()));
- cliOptions.add(new CliOption(MODEL_DERIVING, "Additional classes to include in the deriving() clause of Models"));
+ cliOptions.add(CliOption.newString(MODEL_DERIVING, "Additional classes to include in the deriving() clause of Models"));
+ cliOptions.add(CliOption.newBoolean(STRICT_FIELDS, "Add strictness annotations to all model fields").defaultValue((Boolean.FALSE.toString())));
- cliOptions.add(new CliOption(DATETIME_FORMAT, "format string used to parse/render a datetime").defaultValue(defaultDateTimeFormat));
- cliOptions.add(new CliOption(DATE_FORMAT, "format string used to parse/render a date").defaultValue(defaultDateFormat));
+ cliOptions.add(CliOption.newString(DATETIME_FORMAT, "format string used to parse/render a datetime"));
+ cliOptions.add(CliOption.newString(DATE_FORMAT, "format string used to parse/render a date").defaultValue(defaultDateFormat));
- cliOptions.add(new CliOption(CodegenConstants.HIDE_GENERATION_TIMESTAMP, "hides the timestamp when files were generated").defaultValue(Boolean.TRUE.toString()));
+ cliOptions.add(CliOption.newBoolean(CodegenConstants.HIDE_GENERATION_TIMESTAMP, "hides the timestamp when files were generated").defaultValue(Boolean.TRUE.toString()));
// cliOptions.add(new CliOption(MODEL_IMPORTS, "Additional imports in the Models file"));
// cliOptions.add(new CliOption(MODEL_EXTENSIONS, "Additional extensions in the Models file"));
@@ -241,12 +242,16 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
public void setDateFormat(String value) {
if (StringUtils.isBlank(value)) {
- additionalProperties.put(DATE_FORMAT, defaultDateFormat);
+ additionalProperties.remove(DATE_FORMAT);
} else {
additionalProperties.put(DATE_FORMAT, value);
}
}
+ public void setStrictFields(Boolean value) {
+ additionalProperties.put("x-strictFields", value);
+ }
+
@Override
public void processOpts() {
super.processOpts();
@@ -296,13 +301,19 @@ public class HaskellHttpClientCodegen extends DefaultCodegen implements CodegenC
if (additionalProperties.containsKey(DATETIME_FORMAT)) {
setDateTimeFormat(additionalProperties.get(DATETIME_FORMAT).toString());
} else {
- setDateTimeFormat(null);
+ setDateTimeFormat(null); // default should be null
}
if (additionalProperties.containsKey(DATE_FORMAT)) {
setDateFormat(additionalProperties.get(DATE_FORMAT).toString());
} else {
- setDateFormat(null);
+ setDateFormat(defaultDateFormat);
+ }
+
+ if (additionalProperties.containsKey(STRICT_FIELDS)) {
+ setStrictFields(convertPropertyToBoolean(STRICT_FIELDS));
+ } else {
+ setStrictFields(false);
}
}
diff --git a/modules/swagger-codegen/src/main/resources/haskell-http-client/API.mustache b/modules/swagger-codegen/src/main/resources/haskell-http-client/API.mustache
index 7b9745acb06..30c23fc0c37 100644
--- a/modules/swagger-codegen/src/main/resources/haskell-http-client/API.mustache
+++ b/modules/swagger-codegen/src/main/resources/haskell-http-client/API.mustache
@@ -11,13 +11,15 @@ Module : {{title}}.API
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE InstanceSigs #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds -fno-warn-unused-imports #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# OPTIONS_GHC -fno-warn-name-shadowing -fno-warn-unused-binds -fno-warn-unused-imports #-}
module {{title}}.API where
import {{title}}.Model as M
import {{title}}.MimeTypes
+import {{title}}.Lens
import qualified Data.Aeson as A
import Data.Aeson (Value)
@@ -52,6 +54,8 @@ import qualified Data.Text.Lazy.Encoding as TL
import qualified GHC.Base as P (Alternative)
import qualified Control.Arrow as P (left)
+import qualified Lens.Micro as L
+
import Data.Monoid ((<>))
import Data.Function ((&))
import Data.Set (Set)
@@ -144,11 +148,26 @@ newtype {{{vendorExtensions.x-paramNameType}}} = {{{vendorExtensions.x-paramName
-- | Represents a request. The "req" type variable is the request type. The "res" type variable is the response type.
data {{requestType}} req contentType res = {{requestType}}
{ rMethod :: NH.Method -- ^ Method of {{requestType}}
- , urlPath :: [BCL.ByteString] -- ^ Endpoint of {{requestType}}
- , params :: Params -- ^ params of {{requestType}}
+ , rUrlPath :: [BCL.ByteString] -- ^ Endpoint of {{requestType}}
+ , rParams :: Params -- ^ params of {{requestType}}
}
deriving (P.Show)
+-- | 'rMethod' Lens
+rMethodL :: Lens_' ({{requestType}} req contentType res) NH.Method
+rMethodL f {{requestType}}{..} = (\rMethod -> {{requestType}} { rMethod, ..} ) <$> f rMethod
+{-# INLINE rMethodL #-}
+
+-- | 'rUrlPath' Lens
+rUrlPathL :: Lens_' ({{requestType}} req contentType res) [BCL.ByteString]
+rUrlPathL f {{requestType}}{..} = (\rUrlPath -> {{requestType}} { rUrlPath, ..} ) <$> f rUrlPath
+{-# INLINE rUrlPathL #-}
+
+-- | 'rParams' Lens
+rParamsL :: Lens_' ({{requestType}} req contentType res) Params
+rParamsL f {{requestType}}{..} = (\rParams -> {{requestType}} { rParams, ..} ) <$> f rParams
+{-# INLINE rParamsL #-}
+
-- | Request Params
data Params = Params
{ paramsQuery :: NH.Query
@@ -157,6 +176,21 @@ data Params = Params
}
deriving (P.Show)
+-- | 'paramsQuery' Lens
+paramsQueryL :: Lens_' Params NH.Query
+paramsQueryL f Params{..} = (\paramsQuery -> Params { paramsQuery, ..} ) <$> f paramsQuery
+{-# INLINE paramsQueryL #-}
+
+-- | 'paramsHeaders' Lens
+paramsHeadersL :: Lens_' Params NH.RequestHeaders
+paramsHeadersL f Params{..} = (\paramsHeaders -> Params { paramsHeaders, ..} ) <$> f paramsHeaders
+{-# INLINE paramsHeadersL #-}
+
+-- | 'paramsBody' Lens
+paramsBodyL :: Lens_' Params ParamBody
+paramsBodyL f Params{..} = (\paramsBody -> Params { paramsBody, ..} ) <$> f paramsBody
+{-# INLINE paramsBodyL #-}
+
-- | Request Body
data ParamBody
= ParamBodyNone
@@ -177,15 +211,18 @@ _mkParams :: Params
_mkParams = Params [] [] ParamBodyNone
setHeader :: {{requestType}} req contentType res -> [NH.Header] -> {{requestType}} req contentType res
-setHeader req header =
- let _params = params (req `removeHeader` P.fmap P.fst header)
- in req { params = _params { paramsHeaders = header P.++ paramsHeaders _params } }
+setHeader req header =
+ req `removeHeader` P.fmap P.fst header &
+ L.over (rParamsL . paramsHeadersL) (header P.++)
removeHeader :: {{requestType}} req contentType res -> [NH.HeaderName] -> {{requestType}} req contentType res
-removeHeader req header =
- let _params = params req
- in req { params = _params { paramsHeaders = [h | h <- paramsHeaders _params, cifst h `P.notElem` P.fmap CI.mk header] } }
- where cifst = CI.mk . P.fst
+removeHeader req header =
+ req &
+ L.over
+ (rParamsL . paramsHeadersL)
+ (P.filter (\h -> cifst h `P.notElem` P.fmap CI.mk header))
+ where
+ cifst = CI.mk . P.fst
_setContentTypeHeader :: forall req contentType res. MimeType contentType => {{requestType}} req contentType res -> {{requestType}} req contentType res
@@ -202,35 +239,34 @@ _setAcceptHeader req accept =
_setQuery :: {{requestType}} req contentType res -> [NH.QueryItem] -> {{requestType}} req contentType res
_setQuery req query =
- let _params = params req
- in req { params = _params { paramsQuery = query P.++ [q | q <- paramsQuery _params, cifst q `P.notElem` P.fmap cifst query] } }
- where cifst = CI.mk . P.fst
+ req &
+ L.over
+ (rParamsL . paramsQueryL)
+ ((query P.++) . P.filter (\q -> cifst q `P.notElem` P.fmap cifst query))
+ where
+ cifst = CI.mk . P.fst
_addForm :: {{requestType}} req contentType res -> WH.Form -> {{requestType}} req contentType res
_addForm req newform =
- let _params = params req
- form = case paramsBody _params of
+ let form = case paramsBody (rParams req) of
ParamBodyFormUrlEncoded _form -> _form
_ -> mempty
- in req { params = _params { paramsBody = ParamBodyFormUrlEncoded (newform <> form) } }
+ in req & L.set (rParamsL . paramsBodyL) (ParamBodyFormUrlEncoded (newform <> form))
_addMultiFormPart :: {{requestType}} req contentType res -> NH.Part -> {{requestType}} req contentType res
_addMultiFormPart req newpart =
- let _params = params req
- parts = case paramsBody _params of
+ let parts = case paramsBody (rParams req) of
ParamBodyMultipartFormData _parts -> _parts
_ -> []
- in req { params = _params { paramsBody = ParamBodyMultipartFormData (newpart : parts) } }
+ in req & L.set (rParamsL . paramsBodyL) (ParamBodyMultipartFormData (newpart : parts))
_setBodyBS :: {{requestType}} req contentType res -> B.ByteString -> {{requestType}} req contentType res
_setBodyBS req body =
- let _params = params req
- in req { params = _params { paramsBody = ParamBodyB body } }
+ req & L.set (rParamsL . paramsBodyL) (ParamBodyB body)
_setBodyLBS :: {{requestType}} req contentType res -> BL.ByteString -> {{requestType}} req contentType res
_setBodyLBS req body =
- let _params = params req
- in req { params = _params { paramsBody = ParamBodyBL body } }
+ req & L.set (rParamsL . paramsBodyL) (ParamBodyBL body)
-- ** Params Utils
diff --git a/modules/swagger-codegen/src/main/resources/haskell-http-client/Client.mustache b/modules/swagger-codegen/src/main/resources/haskell-http-client/Client.mustache
index d044001284e..f23f0ebf1dd 100644
--- a/modules/swagger-codegen/src/main/resources/haskell-http-client/Client.mustache
+++ b/modules/swagger-codegen/src/main/resources/haskell-http-client/Client.mustache
@@ -225,15 +225,15 @@ _toInitRequest
-> accept -- ^ "accept" 'MimeType'
-> IO (InitRequest req contentType res accept) -- ^ initialized request
_toInitRequest config req0 accept = do
- parsedReq <- NH.parseRequest $ BCL.unpack $ BCL.append (configHost config) (BCL.concat (urlPath req0))
+ parsedReq <- NH.parseRequest $ BCL.unpack $ BCL.append (configHost config) (BCL.concat (rUrlPath req0))
let req1 = _setAcceptHeader req0 accept & _setContentTypeHeader
- reqHeaders = ("User-Agent", WH.toHeader (configUserAgent config)) : paramsHeaders (params req1)
- reqQuery = NH.renderQuery True (paramsQuery (params req1))
+ reqHeaders = ("User-Agent", WH.toHeader (configUserAgent config)) : paramsHeaders (rParams req1)
+ reqQuery = NH.renderQuery True (paramsQuery (rParams req1))
pReq = parsedReq { NH.method = (rMethod req1)
, NH.requestHeaders = reqHeaders
, NH.queryString = reqQuery
}
- outReq <- case paramsBody (params req1) of
+ outReq <- case paramsBody (rParams req1) of
ParamBodyNone -> pure (pReq { NH.requestBody = mempty })
ParamBodyB bs -> pure (pReq { NH.requestBody = NH.RequestBodyBS bs })
ParamBodyBL bl -> pure (pReq { NH.requestBody = NH.RequestBodyLBS bl })
diff --git a/modules/swagger-codegen/src/main/resources/haskell-http-client/Model.mustache b/modules/swagger-codegen/src/main/resources/haskell-http-client/Model.mustache
index 8bac6084805..17b1b55827f 100644
--- a/modules/swagger-codegen/src/main/resources/haskell-http-client/Model.mustache
+++ b/modules/swagger-codegen/src/main/resources/haskell-http-client/Model.mustache
@@ -2,7 +2,6 @@
Module : {{title}}.Model
-}
-{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveFoldable #-}
{-# LANGUAGE DeriveGeneric #-}
@@ -58,7 +57,7 @@ import qualified Prelude as P
-- {{{.}}}{{/description}}
{{^vendorExtensions.x-customNewtype}}
data {{classname}} = {{classname}}
- { {{#vars}}{{name}} :: {{^required}}Maybe {{/required}}{{datatype}} -- ^ {{#required}}/Required/ {{/required}}{{#readOnly}}/ReadOnly/ {{/readOnly}}"{{baseName}}"{{#description}} - {{description}}{{/description}}{{#hasMore}}
+ { {{#vars}}{{name}} :: {{#x-strictFields}}!({{/x-strictFields}}{{^required}}Maybe {{/required}}{{datatype}}{{#x-strictFields}}){{/x-strictFields}} -- ^ {{#required}}/Required/ {{/required}}{{#readOnly}}/ReadOnly/ {{/readOnly}}"{{baseName}}"{{#description}} - {{description}}{{/description}}{{#hasMore}}
, {{/hasMore}}{{/vars}}
} deriving (P.Show,P.Eq,P.Typeable{{#modelDeriving}},{{modelDeriving}}{{/modelDeriving}})
diff --git a/modules/swagger-codegen/src/main/resources/haskell-http-client/README.mustache b/modules/swagger-codegen/src/main/resources/haskell-http-client/README.mustache
index 4a32daa917c..028941e3ae7 100644
--- a/modules/swagger-codegen/src/main/resources/haskell-http-client/README.mustache
+++ b/modules/swagger-codegen/src/main/resources/haskell-http-client/README.mustache
@@ -50,17 +50,20 @@ haskell-http-client
- use `setHeader` to add any required headers to requests
+* Model Inheritance
+
* Default Parameter Values
* Enum Parameters
+
This is beta software; other cases may not be supported.
-### Codegen "config option" parameters
+### Codegen "additional properties" parameters
These options allow some customization of the code generation process.
-**haskell-http-client specific options:**
+**haskell-http-client additional properties:**
| OPTION | DESCRIPTION | DEFAULT | ACTUAL |
| ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | -------- | ------------------------------------- |
@@ -72,15 +75,23 @@ These options allow some customization of the code generation process.
| generateLenses | Generate Lens optics for Models | true | {{{generateLenses}}} |
| generateModelConstructors | Generate smart constructors (only supply required fields) for models | true | {{{generateModelConstructors}}} |
| modelDeriving | Additional classes to include in the deriving() clause of Models | | {{{modelDeriving}}} |
+| strictFields | Add strictness annotations to all model fields | false | {{{x-strictFields}}} |
[1]: https://www.stackage.org/haddock/lts-9.0/iso8601-time-0.1.4/Data-Time-ISO8601.html#v:formatISO8601Millis
+An example setting _strictFields_ and _dateTimeFormat_:
+
+```
+java -jar swagger-codegen-cli.jar generate -i petstore.yaml -l haskell-http-client -o output/haskell-http-client -DstrictFields=true -DdateTimeFormat="%Y-%m-%dT%H:%M:%S%Q%z"
+```
+
View the full list of Codegen "config option" parameters with the command:
```
-java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar config-help -l haskell-http-client
+java -jar swagger-codegen-cli.jar config-help -l haskell-http-client
```
+
### Example SwaggerPetstore Haddock documentation
An example of the generated haddock documentation targeting the server http://petstore.swagger.io/ (SwaggerPetstore) can be found [here][2]
diff --git a/modules/swagger-codegen/src/main/resources/haskell-http-client/TopLevel.mustache b/modules/swagger-codegen/src/main/resources/haskell-http-client/TopLevel.mustache
index 91e97ff9cd9..3cbf6cd3630 100644
--- a/modules/swagger-codegen/src/main/resources/haskell-http-client/TopLevel.mustache
+++ b/modules/swagger-codegen/src/main/resources/haskell-http-client/TopLevel.mustache
@@ -7,11 +7,11 @@ module {{title}}
, module {{title}}.API
, module {{title}}.Model
, module {{title}}.MimeTypes
- , {{#generateLenses}}module {{title}}.Lens{{/generateLenses}}
+ , module {{title}}.Lens
) where
import {{title}}.API
import {{title}}.Client
import {{title}}.Model
import {{title}}.MimeTypes
-{{#generateLenses}}import {{title}}.Lens{{/generateLenses}}
+import {{title}}.Lens
diff --git a/modules/swagger-codegen/src/main/resources/haskell-http-client/haskell-http-client.cabal.mustache b/modules/swagger-codegen/src/main/resources/haskell-http-client/haskell-http-client.cabal.mustache
index 5e5a6223507..0f1f9f28a6a 100644
--- a/modules/swagger-codegen/src/main/resources/haskell-http-client/haskell-http-client.cabal.mustache
+++ b/modules/swagger-codegen/src/main/resources/haskell-http-client/haskell-http-client.cabal.mustache
@@ -57,13 +57,14 @@ library
, monad-logger >=0.3 && <0.4
, safe-exceptions <0.2
, case-insensitive
+ , microlens >= 0.4.3 && <0.5
exposed-modules:
{{title}}
{{title}}.API
{{title}}.Client
{{title}}.Model
{{title}}.MimeTypes
- {{#generateLenses}}{{title}}.Lens{{/generateLenses}}
+ {{title}}.Lens
other-modules:
Paths_{{pathsName}}
default-language: Haskell2010
diff --git a/modules/swagger-codegen/src/main/resources/haskell-http-client/package.mustache b/modules/swagger-codegen/src/main/resources/haskell-http-client/package.mustache
index c0747d40afd..23b18b7c6ce 100644
--- a/modules/swagger-codegen/src/main/resources/haskell-http-client/package.mustache
+++ b/modules/swagger-codegen/src/main/resources/haskell-http-client/package.mustache
@@ -36,16 +36,18 @@ dependencies:
- transformers >=0.4.0.0
- mtl >=2.2.1
- unordered-containers
+ghc-options: -Wall
library:
source-dirs: lib
- ghc-options: -Wall
+ ghc-options:
+ {{#x-strictFields}}- -funbox-strict-fields{{/x-strictFields}}
exposed-modules:
- {{title}}
- {{title}}.API
- {{title}}.Client
- {{title}}.Model
- {{title}}.MimeTypes
- {{#generateLenses}}- {{title}}.Lens{{/generateLenses}}
+ - {{title}}.Lens
dependencies:
- aeson >=1.0 && <2.0
- bytestring >=0.10.0 && <0.11
@@ -65,6 +67,7 @@ library:
- monad-logger >=0.3 && <0.4
- safe-exceptions <0.2
- case-insensitive
+ - microlens >= 0.4.3 && <0.5
tests:
tests:
main: Test.hs
diff --git a/modules/swagger-codegen/src/main/resources/haskell-http-client/tests/Instances.mustache b/modules/swagger-codegen/src/main/resources/haskell-http-client/tests/Instances.mustache
index 51de32c1727..5057ecb312a 100644
--- a/modules/swagger-codegen/src/main/resources/haskell-http-client/tests/Instances.mustache
+++ b/modules/swagger-codegen/src/main/resources/haskell-http-client/tests/Instances.mustache
@@ -1,3 +1,5 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
module Instances where
import Data.Text (Text, pack)
diff --git a/modules/swagger-codegen/src/main/resources/haskell-http-client/tests/PropMime.mustache b/modules/swagger-codegen/src/main/resources/haskell-http-client/tests/PropMime.mustache
index 763ceed8935..f672a4d3adf 100644
--- a/modules/swagger-codegen/src/main/resources/haskell-http-client/tests/PropMime.mustache
+++ b/modules/swagger-codegen/src/main/resources/haskell-http-client/tests/PropMime.mustache
@@ -1,6 +1,7 @@
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ConstraintKinds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
module PropMime where
diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/haskellhttpclient/HaskellHttpClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/haskellhttpclient/HaskellHttpClientOptionsTest.java
index b63a4bf4888..98d583fbd11 100644
--- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/haskellhttpclient/HaskellHttpClientOptionsTest.java
+++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/haskellhttpclient/HaskellHttpClientOptionsTest.java
@@ -47,6 +47,8 @@ public class HaskellHttpClientOptionsTest extends AbstractOptionsTest {
times = 1;
clientCodegen.setDateFormat(HaskellHttpClientOptionsProvider.DATE_FORMAT);
times = 1;
+ clientCodegen.setStrictFields(Boolean.valueOf(HaskellHttpClientOptionsProvider.STRICT_FIELDS));
+ times = 1;
}};
}
diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/HaskellHttpClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/HaskellHttpClientOptionsProvider.java
index 8e589ac13a4..d124c66ff54 100644
--- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/HaskellHttpClientOptionsProvider.java
+++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/HaskellHttpClientOptionsProvider.java
@@ -19,6 +19,7 @@ public class HaskellHttpClientOptionsProvider implements OptionsProvider {
public static final String DATETIME_FORMAT = "%Y-%m-%dT%H:%M:%S%Q%z";
public static final String DATE_FORMAT = "%Y-%m-%d";
public static final String MODEL_DERIVING = "";
+ public static final String STRICT_FIELDS = "false";
public static final String GENERATE_FORM_URLENCODED_INSTANCES = "true";
public static final String GENERATE_LENSES = "true";
public static final String GENERATE_MODEL_CONSTRUCTORS = "true";
@@ -46,6 +47,7 @@ public class HaskellHttpClientOptionsProvider implements OptionsProvider {
.put(HaskellHttpClientCodegen.GENERATE_FORM_URLENCODED_INSTANCES, GENERATE_FORM_URLENCODED_INSTANCES)
.put(HaskellHttpClientCodegen.GENERATE_LENSES, GENERATE_LENSES)
.put(HaskellHttpClientCodegen.GENERATE_MODEL_CONSTRUCTORS, GENERATE_MODEL_CONSTRUCTORS)
+ .put(HaskellHttpClientCodegen.STRICT_FIELDS, STRICT_FIELDS)
.build();
}
diff --git a/samples/client/petstore/haskell-http-client/CONTRIBUTING.md b/samples/client/petstore/haskell-http-client/CONTRIBUTING.md
new file mode 100644
index 00000000000..91fbe58305b
--- /dev/null
+++ b/samples/client/petstore/haskell-http-client/CONTRIBUTING.md
@@ -0,0 +1,28 @@
+### Rebuild jar
+
+```
+ (cd ../../../..; mvn package);
+```
+
+### Regenerate Template
+
+1. Run the shell script `haskell-http-client-petstore.sh` to update the Petstore sample
+
+```bash
+ (cd ../../../..; ./bin/haskell-http-client-petstore.sh);
+```
+
+### Typecheck, Build and run Unit tests
+
+2. Check that the following commands complete build without any errors
+
+```bash
+ (stack clean && stack haddock && stack test);
+ (cd ./example-app; stack clean && stack build);
+ (cd ./tests-integration; stack clean && stack build --no-run-tests);
+```
+
+### Integration Tests
+
+3. run the integration tests as described in `./tests-integration/README.md`
+
diff --git a/samples/client/petstore/haskell-http-client/README.md b/samples/client/petstore/haskell-http-client/README.md
index 817c834271d..35ac99a323a 100644
--- a/samples/client/petstore/haskell-http-client/README.md
+++ b/samples/client/petstore/haskell-http-client/README.md
@@ -50,17 +50,20 @@ haskell-http-client
- use `setHeader` to add any required headers to requests
+* Model Inheritance
+
* Default Parameter Values
* Enum Parameters
+
This is beta software; other cases may not be supported.
-### Codegen "config option" parameters
+### Codegen "additional properties" parameters
These options allow some customization of the code generation process.
-**haskell-http-client specific options:**
+**haskell-http-client additional properties:**
| OPTION | DESCRIPTION | DEFAULT | ACTUAL |
| ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | -------- | ------------------------------------- |
@@ -72,15 +75,23 @@ These options allow some customization of the code generation process.
| generateLenses | Generate Lens optics for Models | true | true |
| generateModelConstructors | Generate smart constructors (only supply required fields) for models | true | true |
| modelDeriving | Additional classes to include in the deriving() clause of Models | | |
+| strictFields | Add strictness annotations to all model fields | false | false |
[1]: https://www.stackage.org/haddock/lts-9.0/iso8601-time-0.1.4/Data-Time-ISO8601.html#v:formatISO8601Millis
+An example setting _strictFields_ and _dateTimeFormat_:
+
+```
+java -jar swagger-codegen-cli.jar generate -i petstore.yaml -l haskell-http-client -o output/haskell-http-client -DstrictFields=true -DdateTimeFormat="%Y-%m-%dT%H:%M:%S%Q%z"
+```
+
View the full list of Codegen "config option" parameters with the command:
```
-java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar config-help -l haskell-http-client
+java -jar swagger-codegen-cli.jar config-help -l haskell-http-client
```
+
### Example SwaggerPetstore Haddock documentation
An example of the generated haddock documentation targeting the server http://petstore.swagger.io/ (SwaggerPetstore) can be found [here][2]
diff --git a/samples/client/petstore/haskell-http-client/docs/SwaggerPetstore-API.html b/samples/client/petstore/haskell-http-client/docs/SwaggerPetstore-API.html
index 2dab043222b..c19843f7d57 100644
--- a/samples/client/petstore/haskell-http-client/docs/SwaggerPetstore-API.html
+++ b/samples/client/petstore/haskell-http-client/docs/SwaggerPetstore-API.html
@@ -1,4 +1,4 @@
SwaggerPetstore.APISynopsis
- addPet :: (Consumes AddPet contentType, MimeRender contentType Pet) => contentType -> Pet -> SwaggerPetstoreRequest AddPet contentType res
- data AddPet
- deletePet :: Integer -> SwaggerPetstoreRequest DeletePet MimeNoContent res
- data DeletePet
- findPetsByStatus :: [Text] -> SwaggerPetstoreRequest FindPetsByStatus MimeNoContent [Pet]
- data FindPetsByStatus
- findPetsByTags :: [Text] -> SwaggerPetstoreRequest FindPetsByTags MimeNoContent [Pet]
- data FindPetsByTags
- getPetById :: Integer -> SwaggerPetstoreRequest GetPetById MimeNoContent Pet
- data GetPetById
- updatePet :: (Consumes UpdatePet contentType, MimeRender contentType Pet) => contentType -> Pet -> SwaggerPetstoreRequest UpdatePet contentType res
- data UpdatePet
- updatePetWithForm :: Consumes UpdatePetWithForm contentType => contentType -> Integer -> SwaggerPetstoreRequest UpdatePetWithForm contentType res
- data UpdatePetWithForm
- uploadFile :: Consumes UploadFile contentType => contentType -> Integer -> SwaggerPetstoreRequest UploadFile contentType ApiResponse
- data UploadFile
- deleteOrder :: Text -> SwaggerPetstoreRequest DeleteOrder MimeNoContent res
- data DeleteOrder
- getInventory :: SwaggerPetstoreRequest GetInventory MimeNoContent (Map String Int)
- data GetInventory
- getOrderById :: Integer -> SwaggerPetstoreRequest GetOrderById MimeNoContent Order
- data GetOrderById
- placeOrder :: (Consumes PlaceOrder contentType, MimeRender contentType Order) => contentType -> Order -> SwaggerPetstoreRequest PlaceOrder contentType Order
- data PlaceOrder
- createUser :: (Consumes CreateUser contentType, MimeRender contentType User) => contentType -> User -> SwaggerPetstoreRequest CreateUser contentType res
- data CreateUser
- createUsersWithArrayInput :: (Consumes CreateUsersWithArrayInput contentType, MimeRender contentType [User]) => contentType -> [User] -> SwaggerPetstoreRequest CreateUsersWithArrayInput contentType res
- data CreateUsersWithArrayInput
- createUsersWithListInput :: (Consumes CreateUsersWithListInput contentType, MimeRender contentType [User]) => contentType -> [User] -> SwaggerPetstoreRequest CreateUsersWithListInput contentType res
- data CreateUsersWithListInput
- deleteUser :: Text -> SwaggerPetstoreRequest DeleteUser MimeNoContent res
- data DeleteUser
- getUserByName :: Text -> SwaggerPetstoreRequest GetUserByName MimeNoContent User
- data GetUserByName
- loginUser :: Text -> Text -> SwaggerPetstoreRequest LoginUser MimeNoContent Text
- data LoginUser
- logoutUser :: SwaggerPetstoreRequest LogoutUser MimeNoContent res
- data LogoutUser
- updateUser :: (Consumes UpdateUser contentType, MimeRender contentType User) => contentType -> Text -> User -> SwaggerPetstoreRequest UpdateUser contentType res
- data UpdateUser
- class HasBodyParam req param where
- class HasOptionalParam req param where
- newtype ApiUnderscorekey = ApiUnderscorekey {}
- newtype Name = Name {}
- newtype Status = Status {}
- newtype AdditionalMetadata = AdditionalMetadata {}
- newtype File = File {}
- data SwaggerPetstoreRequest req contentType res = SwaggerPetstoreRequest {}
- data Params = Params {}
- data ParamBody
- _mkRequest :: Method -> [ByteString] -> SwaggerPetstoreRequest req contentType res
- _mkParams :: Params
- setHeader :: SwaggerPetstoreRequest req contentType res -> [Header] -> SwaggerPetstoreRequest req contentType res
- removeHeader :: SwaggerPetstoreRequest req contentType res -> [HeaderName] -> SwaggerPetstoreRequest req contentType res
- _setContentTypeHeader :: forall req contentType res. MimeType contentType => SwaggerPetstoreRequest req contentType res -> SwaggerPetstoreRequest req contentType res
- _setAcceptHeader :: forall req contentType res accept. MimeType accept => SwaggerPetstoreRequest req contentType res -> accept -> SwaggerPetstoreRequest req contentType res
- _setQuery :: SwaggerPetstoreRequest req contentType res -> [QueryItem] -> SwaggerPetstoreRequest req contentType res
- _addForm :: SwaggerPetstoreRequest req contentType res -> Form -> SwaggerPetstoreRequest req contentType res
- _addMultiFormPart :: SwaggerPetstoreRequest req contentType res -> Part -> SwaggerPetstoreRequest req contentType res
- _setBodyBS :: SwaggerPetstoreRequest req contentType res -> ByteString -> SwaggerPetstoreRequest req contentType res
- _setBodyLBS :: SwaggerPetstoreRequest req contentType res -> ByteString -> SwaggerPetstoreRequest req contentType res
- toPath :: ToHttpApiData a => a -> ByteString
- toHeader :: ToHttpApiData a => (HeaderName, a) -> [Header]
- toForm :: ToHttpApiData v => (ByteString, v) -> Form
- toQuery :: ToHttpApiData a => (ByteString, Maybe a) -> [QueryItem]
- data CollectionFormat
- toHeaderColl :: ToHttpApiData a => CollectionFormat -> (HeaderName, [a]) -> [Header]
- toFormColl :: ToHttpApiData v => CollectionFormat -> (ByteString, [v]) -> Form
- toQueryColl :: ToHttpApiData a => CollectionFormat -> (ByteString, Maybe [a]) -> Query
- _toColl :: Traversable f => CollectionFormat -> (f a -> [(b, ByteString)]) -> f [a] -> [(b, ByteString)]
- _toCollA :: (Traversable f, Traversable t, Alternative t) => CollectionFormat -> (f (t a) -> [(b, t ByteString)]) -> f (t [a]) -> [(b, t ByteString)]
- _toCollA' :: (Monoid c, Traversable f, Traversable t, Alternative t) => CollectionFormat -> (f (t a) -> [(b, t c)]) -> (Char -> c) -> f (t [a]) -> [(b, t c)]
Operations
Pet
addPet
addPet Source #
POST /pet
Add a new pet to the store
AuthMethod: petstore_auth
Note: Has Produces
instances, but no response schema
deletePet
deletePet Source #
DELETE /pet/{petId}
Deletes a pet
AuthMethod: petstore_auth
Note: Has Produces
instances, but no response schema
findPetsByStatus
findPetsByStatus Source #
GET /pet/findByStatus
Finds Pets by status
Multiple status values can be provided with comma separated strings
AuthMethod: petstore_auth
findPetsByTags
findPetsByTags Source #
GET /pet/findByTags
Finds Pets by tags
Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
AuthMethod: petstore_auth
getPetById
getPetById Source #
GET /pet/{petId}
Find pet by ID
Returns a single pet
AuthMethod: api_key
updatePet
updatePet Source #
PUT /pet
Update an existing pet
AuthMethod: petstore_auth
Note: Has Produces
instances, but no response schema
updatePetWithForm
updatePetWithForm Source #
POST /pet/{petId}
Updates a pet in the store with form data
AuthMethod: petstore_auth
Note: Has Produces
instances, but no response schema
uploadFile
uploadFile Source #
POST /pet/{petId}/uploadImage
uploads an image
AuthMethod: petstore_auth
Store
deleteOrder
deleteOrder Source #
DELETE /store/order/{orderId}
Delete purchase order by ID
For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors
Note: Has Produces
instances, but no response schema
getInventory
getOrderById
getOrderById Source #
GET /store/order/{orderId}
Find purchase order by ID
For valid response try integer IDs with value 5 or 10. Other values will generated exceptions
placeOrder
User
createUser
createUser Source #
POST /user
Create user
This can only be done by the logged in user.
Note: Has Produces
instances, but no response schema
createUsersWithArrayInput
createUsersWithListInput
deleteUser
deleteUser Source #
DELETE /user/{username}
Delete user
This can only be done by the logged in user.
Note: Has Produces
instances, but no response schema
getUserByName
loginUser
logoutUser
updateUser
updateUser Source #
PUT /user/{username}
Updated user
This can only be done by the logged in user.
Note: Has Produces
instances, but no response schema
HasBodyParam
HasOptionalParam
Optional Request Parameter Types
SwaggerPetstoreRequest
data SwaggerPetstoreRequest req contentType res Source #
Represents a request. The "req" type variable is the request type. The "res" type variable is the response type.
SwaggerPetstoreRequest Utils
Params Utils
\ No newline at end of file
+Synopsis
- addPet :: (Consumes AddPet contentType, MimeRender contentType Pet) => contentType -> Pet -> SwaggerPetstoreRequest AddPet contentType res
- data AddPet
- deletePet :: Integer -> SwaggerPetstoreRequest DeletePet MimeNoContent res
- data DeletePet
- findPetsByStatus :: [Text] -> SwaggerPetstoreRequest FindPetsByStatus MimeNoContent [Pet]
- data FindPetsByStatus
- findPetsByTags :: [Text] -> SwaggerPetstoreRequest FindPetsByTags MimeNoContent [Pet]
- data FindPetsByTags
- getPetById :: Integer -> SwaggerPetstoreRequest GetPetById MimeNoContent Pet
- data GetPetById
- updatePet :: (Consumes UpdatePet contentType, MimeRender contentType Pet) => contentType -> Pet -> SwaggerPetstoreRequest UpdatePet contentType res
- data UpdatePet
- updatePetWithForm :: Consumes UpdatePetWithForm contentType => contentType -> Integer -> SwaggerPetstoreRequest UpdatePetWithForm contentType res
- data UpdatePetWithForm
- uploadFile :: Consumes UploadFile contentType => contentType -> Integer -> SwaggerPetstoreRequest UploadFile contentType ApiResponse
- data UploadFile
- deleteOrder :: Text -> SwaggerPetstoreRequest DeleteOrder MimeNoContent res
- data DeleteOrder
- getInventory :: SwaggerPetstoreRequest GetInventory MimeNoContent (Map String Int)
- data GetInventory
- getOrderById :: Integer -> SwaggerPetstoreRequest GetOrderById MimeNoContent Order
- data GetOrderById
- placeOrder :: (Consumes PlaceOrder contentType, MimeRender contentType Order) => contentType -> Order -> SwaggerPetstoreRequest PlaceOrder contentType Order
- data PlaceOrder
- createUser :: (Consumes CreateUser contentType, MimeRender contentType User) => contentType -> User -> SwaggerPetstoreRequest CreateUser contentType res
- data CreateUser
- createUsersWithArrayInput :: (Consumes CreateUsersWithArrayInput contentType, MimeRender contentType [User]) => contentType -> [User] -> SwaggerPetstoreRequest CreateUsersWithArrayInput contentType res
- data CreateUsersWithArrayInput
- createUsersWithListInput :: (Consumes CreateUsersWithListInput contentType, MimeRender contentType [User]) => contentType -> [User] -> SwaggerPetstoreRequest CreateUsersWithListInput contentType res
- data CreateUsersWithListInput
- deleteUser :: Text -> SwaggerPetstoreRequest DeleteUser MimeNoContent res
- data DeleteUser
- getUserByName :: Text -> SwaggerPetstoreRequest GetUserByName MimeNoContent User
- data GetUserByName
- loginUser :: Text -> Text -> SwaggerPetstoreRequest LoginUser MimeNoContent Text
- data LoginUser
- logoutUser :: SwaggerPetstoreRequest LogoutUser MimeNoContent res
- data LogoutUser
- updateUser :: (Consumes UpdateUser contentType, MimeRender contentType User) => contentType -> Text -> User -> SwaggerPetstoreRequest UpdateUser contentType res
- data UpdateUser
- class HasBodyParam req param where
- class HasOptionalParam req param where
- newtype ApiUnderscorekey = ApiUnderscorekey {}
- newtype Name = Name {}
- newtype Status = Status {}
- newtype AdditionalMetadata = AdditionalMetadata {}
- newtype File = File {}
- data SwaggerPetstoreRequest req contentType res = SwaggerPetstoreRequest {}
- rMethodL :: Lens_' (SwaggerPetstoreRequest req contentType res) Method
- rUrlPathL :: Lens_' (SwaggerPetstoreRequest req contentType res) [ByteString]
- rParamsL :: Lens_' (SwaggerPetstoreRequest req contentType res) Params
- data Params = Params {}
- paramsQueryL :: Lens_' Params Query
- paramsHeadersL :: Lens_' Params RequestHeaders
- paramsBodyL :: Lens_' Params ParamBody
- data ParamBody
- _mkRequest :: Method -> [ByteString] -> SwaggerPetstoreRequest req contentType res
- _mkParams :: Params
- setHeader :: SwaggerPetstoreRequest req contentType res -> [Header] -> SwaggerPetstoreRequest req contentType res
- removeHeader :: SwaggerPetstoreRequest req contentType res -> [HeaderName] -> SwaggerPetstoreRequest req contentType res
- _setContentTypeHeader :: forall req contentType res. MimeType contentType => SwaggerPetstoreRequest req contentType res -> SwaggerPetstoreRequest req contentType res
- _setAcceptHeader :: forall req contentType res accept. MimeType accept => SwaggerPetstoreRequest req contentType res -> accept -> SwaggerPetstoreRequest req contentType res
- _setQuery :: SwaggerPetstoreRequest req contentType res -> [QueryItem] -> SwaggerPetstoreRequest req contentType res
- _addForm :: SwaggerPetstoreRequest req contentType res -> Form -> SwaggerPetstoreRequest req contentType res
- _addMultiFormPart :: SwaggerPetstoreRequest req contentType res -> Part -> SwaggerPetstoreRequest req contentType res
- _setBodyBS :: SwaggerPetstoreRequest req contentType res -> ByteString -> SwaggerPetstoreRequest req contentType res
- _setBodyLBS :: SwaggerPetstoreRequest req contentType res -> ByteString -> SwaggerPetstoreRequest req contentType res
- toPath :: ToHttpApiData a => a -> ByteString
- toHeader :: ToHttpApiData a => (HeaderName, a) -> [Header]
- toForm :: ToHttpApiData v => (ByteString, v) -> Form
- toQuery :: ToHttpApiData a => (ByteString, Maybe a) -> [QueryItem]
- data CollectionFormat
- toHeaderColl :: ToHttpApiData a => CollectionFormat -> (HeaderName, [a]) -> [Header]
- toFormColl :: ToHttpApiData v => CollectionFormat -> (ByteString, [v]) -> Form
- toQueryColl :: ToHttpApiData a => CollectionFormat -> (ByteString, Maybe [a]) -> Query
- _toColl :: Traversable f => CollectionFormat -> (f a -> [(b, ByteString)]) -> f [a] -> [(b, ByteString)]
- _toCollA :: (Traversable f, Traversable t, Alternative t) => CollectionFormat -> (f (t a) -> [(b, t ByteString)]) -> f (t [a]) -> [(b, t ByteString)]
- _toCollA' :: (Monoid c, Traversable f, Traversable t, Alternative t) => CollectionFormat -> (f (t a) -> [(b, t c)]) -> (Char -> c) -> f (t [a]) -> [(b, t c)]
Operations
Pet
addPet
addPet Source #
POST /pet
Add a new pet to the store
AuthMethod: petstore_auth
Note: Has Produces
instances, but no response schema
deletePet
deletePet Source #
DELETE /pet/{petId}
Deletes a pet
AuthMethod: petstore_auth
Note: Has Produces
instances, but no response schema
findPetsByStatus
findPetsByStatus Source #
GET /pet/findByStatus
Finds Pets by status
Multiple status values can be provided with comma separated strings
AuthMethod: petstore_auth
findPetsByTags
findPetsByTags Source #
GET /pet/findByTags
Finds Pets by tags
Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
AuthMethod: petstore_auth
getPetById
getPetById Source #
GET /pet/{petId}
Find pet by ID
Returns a single pet
AuthMethod: api_key
updatePet
updatePet Source #
PUT /pet
Update an existing pet
AuthMethod: petstore_auth
Note: Has Produces
instances, but no response schema
updatePetWithForm
updatePetWithForm Source #
POST /pet/{petId}
Updates a pet in the store with form data
AuthMethod: petstore_auth
Note: Has Produces
instances, but no response schema
uploadFile
uploadFile Source #
POST /pet/{petId}/uploadImage
uploads an image
AuthMethod: petstore_auth
Store
deleteOrder
deleteOrder Source #
DELETE /store/order/{orderId}
Delete purchase order by ID
For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors
Note: Has Produces
instances, but no response schema
getInventory
getOrderById
getOrderById Source #
GET /store/order/{orderId}
Find purchase order by ID
For valid response try integer IDs with value 5 or 10. Other values will generated exceptions
placeOrder
User
createUser
createUser Source #
POST /user
Create user
This can only be done by the logged in user.
Note: Has Produces
instances, but no response schema
createUsersWithArrayInput
createUsersWithListInput
deleteUser
deleteUser Source #
DELETE /user/{username}
Delete user
This can only be done by the logged in user.
Note: Has Produces
instances, but no response schema
getUserByName
loginUser
logoutUser
updateUser
updateUser Source #
PUT /user/{username}
Updated user
This can only be done by the logged in user.
Note: Has Produces
instances, but no response schema
HasBodyParam
HasOptionalParam
Optional Request Parameter Types
SwaggerPetstoreRequest
data SwaggerPetstoreRequest req contentType res Source #
Represents a request. The "req" type variable is the request type. The "res" type variable is the response type.
SwaggerPetstoreRequest Utils
Params Utils