mirror of
https://github.com/OpenAPITools/openapi-generator.git
synced 2025-12-05 22:46:09 +00:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c317c753f0 | ||
|
|
d0a427a84c |
115
CI/.drone.yml
115
CI/.drone.yml
@@ -1,62 +1,61 @@
|
||||
kind: pipeline
|
||||
name: default
|
||||
|
||||
steps:
|
||||
# test Elm client
|
||||
- name: elm
|
||||
image: odesimple/elm:0.19
|
||||
commands:
|
||||
- (cd samples/openapi3/client/petstore/elm && ./elm-compile-test)
|
||||
# test Java 11 HTTP client
|
||||
- name: java11-test
|
||||
image: openjdk:11.0
|
||||
commands:
|
||||
- ./mvnw --quiet clean install -Dorg.slf4j.simpleLogger.defaultLogLevel=error
|
||||
- ./mvnw --quiet verify -Psamples.droneio -Dorg.slf4j.simpleLogger.defaultLogLevel=error
|
||||
# run ensure up-to-date
|
||||
- /bin/bash bin/utils/ensure-up-to-date
|
||||
# test java native client
|
||||
- ./mvnw clean test -f samples/client/petstore/java/native/pom.xml
|
||||
- ./mvnw clean test -f samples/client/petstore/java/native-async/pom.xml
|
||||
- ./mvnw clean test -f samples/openapi3/client/petstore/java/native/pom.xml
|
||||
# test all generators with fake petstore spec (2.0, 3.0)
|
||||
- /bin/bash bin/utils/test-fake-petstore-for-all.sh
|
||||
# generate test scripts
|
||||
- /bin/bash bin/tests/run-all-test
|
||||
# test nim client
|
||||
- name: nim-client-test
|
||||
image: nimlang/nim
|
||||
commands:
|
||||
- (cd samples/client/petstore/nim/ && nim c sample_client.nim)
|
||||
# test protobuf schema generator
|
||||
- name: protobuf-schema-test
|
||||
image: nanoservice/protobuf-go
|
||||
commands:
|
||||
- protoc --version
|
||||
- mkdir /var/tmp/go/
|
||||
- cd samples/config/petstore/protobuf-schema
|
||||
- protoc --go_out=/var/tmp/go/ services/*
|
||||
- protoc --go_out=/var/tmp/go/ models/*
|
||||
# test aspnetcore 3.x
|
||||
- name: aspnetcore-test
|
||||
image: mcr.microsoft.com/dotnet/core/sdk:3.1
|
||||
commands:
|
||||
- (cd samples/server/petstore/aspnetcore-3.1/ && /bin/sh build.sh)
|
||||
- (cd samples/server/petstore/aspnetcore-3.0/ && /bin/sh build.sh)
|
||||
# test ocaml petstore client
|
||||
- name: ocaml-test
|
||||
image: ocaml/opam2:4.07
|
||||
commands:
|
||||
- sudo apt-get -y install m4
|
||||
- cd samples/client/petstore/ocaml
|
||||
- opam install ppx_deriving_yojson cohttp ppx_deriving cohttp-lwt-unix
|
||||
- opam pin add ocaml-migrate-parsetree 1.3.1
|
||||
- eval $(opam env)
|
||||
- sudo chmod -R 777 .
|
||||
- dune build --build-dir=./_build
|
||||
# test haskell client
|
||||
- name: haskell-client-test
|
||||
image: haskell:8.6.5
|
||||
commands:
|
||||
- (cd samples/client/petstore/haskell-http-client/ && stack --install-ghc --no-haddock-deps haddock --fast && stack test --fast)
|
||||
# test erlang client and server
|
||||
- name: erlang
|
||||
image: erlang:alpine
|
||||
commands:
|
||||
- (cd samples/client/petstore/erlang-client && rebar3 compile)
|
||||
- (cd samples/client/petstore/erlang-proper && rebar3 compile)
|
||||
#- (cd samples/server/petstore/erlang-server && rebar3 compile)
|
||||
#- name: java11-test
|
||||
# image: openjdk:11.0
|
||||
# commands:
|
||||
# - ./mvnw --quiet clean install -Dorg.slf4j.simpleLogger.defaultLogLevel=error
|
||||
# - ./mvnw --quiet verify -Psamples.droneio -Dorg.slf4j.simpleLogger.defaultLogLevel=error
|
||||
# # run ensure up-to-date
|
||||
# - /bin/bash bin/utils/ensure-up-to-date
|
||||
# # test java native client
|
||||
# - ./mvnw clean test -f samples/client/petstore/java/native/pom.xml
|
||||
# - ./mvnw clean test -f samples/client/petstore/java/native-async/pom.xml
|
||||
# - ./mvnw clean test -f samples/openapi3/client/petstore/java/native/pom.xml
|
||||
# # test all generators with fake petstore spec (2.0, 3.0)
|
||||
# - /bin/bash bin/utils/test-fake-petstore-for-all.sh
|
||||
# # generate test scripts
|
||||
# - /bin/bash bin/tests/run-all-test
|
||||
## test nim client
|
||||
#- name: nim-client-test
|
||||
# image: nimlang/nim
|
||||
# commands:
|
||||
# - (cd samples/client/petstore/nim/ && nim c sample_client.nim)
|
||||
## test protobuf schema generator
|
||||
#- name: protobuf-schema-test
|
||||
# image: nanoservice/protobuf-go
|
||||
# commands:
|
||||
# - protoc --version
|
||||
# - mkdir /var/tmp/go/
|
||||
# - cd samples/config/petstore/protobuf-schema
|
||||
# - protoc --go_out=/var/tmp/go/ services/*
|
||||
# - protoc --go_out=/var/tmp/go/ models/*
|
||||
## test aspnetcore 3.x
|
||||
#- name: aspnetcore-test
|
||||
# image: mcr.microsoft.com/dotnet/core/sdk:3.1
|
||||
# commands:
|
||||
# - (cd samples/server/petstore/aspnetcore-3.1/ && /bin/sh build.sh)
|
||||
# - (cd samples/server/petstore/aspnetcore-3.0/ && /bin/sh build.sh)
|
||||
## test ocaml petstore client
|
||||
#- name: ocaml-test
|
||||
# image: ocaml/opam2:4.07
|
||||
# commands:
|
||||
# - sudo apt-get -y install m4
|
||||
# - cd samples/client/petstore/ocaml
|
||||
# - opam install ppx_deriving_yojson cohttp ppx_deriving cohttp-lwt-unix
|
||||
# - opam pin add ocaml-migrate-parsetree 1.3.1
|
||||
# - eval $(opam env)
|
||||
# - sudo chmod -R 777 .
|
||||
# - dune build --build-dir=./_build
|
||||
## test haskell client
|
||||
#- name: haskell-client-test
|
||||
# image: haskell:8.6.5
|
||||
# commands:
|
||||
# - (cd samples/client/petstore/haskell-http-client/ && stack --install-ghc --no-haddock-deps haddock --fast && stack test --fast)
|
||||
|
||||
@@ -48,7 +48,6 @@ Code change should conform to the programming style guide of the respective lang
|
||||
- C#: https://msdn.microsoft.com/en-us/library/vstudio/ff926074.aspx
|
||||
- C++: https://google.github.io/styleguide/cppguide.html
|
||||
- C++ (Tizen): https://wiki.tizen.org/Native_Platform_Coding_Idiom_and_Style_Guide#C.2B.2B_Coding_Style
|
||||
- C++ (Unreal Engine 4): https://docs.unrealengine.com/en-US/ProductionPipelines/DevelopmentSetup/CodingStandard/index.html
|
||||
- Clojure: https://github.com/bbatsov/clojure-style-guide
|
||||
- Crystal: https://crystal-lang.org/reference/conventions/coding_style.html
|
||||
- Dart: https://www.dartlang.org/guides/language/effective-dart/style
|
||||
|
||||
@@ -52,7 +52,6 @@ Code change should conform to the programming style guide of the respective lang
|
||||
- C#: https://msdn.microsoft.com/en-us/library/vstudio/ff926074.aspx
|
||||
- C++: https://google.github.io/styleguide/cppguide.html
|
||||
- C++ (Tizen): https://wiki.tizen.org/Native_Platform_Coding_Idiom_and_Style_Guide#C.2B.2B_Coding_Style
|
||||
- C++ (Unreal Engine 4): https://docs.unrealengine.com/en-US/ProductionPipelines/DevelopmentSetup/CodingStandard/index.html
|
||||
- Clojure: https://github.com/bbatsov/clojure-style-guide
|
||||
- Crystal: https://crystal-lang.org/reference/conventions/coding_style.html
|
||||
- Dart: https://www.dartlang.org/guides/language/effective-dart/style
|
||||
|
||||
@@ -7,9 +7,9 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|
||||
|
||||
| Option | Description | Values | Default |
|
||||
| ------ | ----------- | ------ | ------- |
|
||||
|aspnetCoreVersion|ASP.NET Core version: 5.0, 3.1, 3.0, 2.2, 2.1, 2.0 (deprecated)|<dl><dt>**2.0**</dt><dd>ASP.NET Core 2.0</dd><dt>**2.1**</dt><dd>ASP.NET Core 2.1</dd><dt>**2.2**</dt><dd>ASP.NET Core 2.2</dd><dt>**3.0**</dt><dd>ASP.NET Core 3.0</dd><dt>**3.1**</dt><dd>ASP.NET Core 3.1</dd><dt>**5.0**</dt><dd>ASP.NET Core 5.0</dd></dl>|3.1|
|
||||
|buildTarget|Target to build an application or library|<dl><dt>**program**</dt><dd>Generate code for a standalone server</dd><dt>**library**</dt><dd>Generate code for a server abstract class library</dd></dl>|program|
|
||||
|classModifier|Class Modifier for controller classes: Empty string or abstract.|<dl><dt>****</dt><dd>Keep class default with no modifier</dd><dt>**abstract**</dt><dd>Make class abstract</dd></dl>||
|
||||
|aspnetCoreVersion|ASP.NET Core version: 5.0, 3.1, 3.0, 2.2, 2.1, 2.0 (deprecated)| |3.1|
|
||||
|buildTarget|Target to build an application or library| |program|
|
||||
|classModifier|Class Modifier for controller classes: Empty string or abstract.| ||
|
||||
|compatibilityVersion|ASP.Net Core CompatibilityVersion| |Version_2_2|
|
||||
|enumNameSuffix|Suffix that will be appended to all enum names.| |Enum|
|
||||
|enumValueSuffix|Suffix that will be appended to all enum values.| |Enum|
|
||||
@@ -17,10 +17,10 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|
||||
|isLibrary|Is the build a library| |false|
|
||||
|licenseName|The name of the license| |NoLicense|
|
||||
|licenseUrl|The URL of the license| |http://localhost|
|
||||
|modelClassModifier|Model Class Modifier can be nothing or partial|<dl><dt>****</dt><dd>Keep model class default with no modifier</dd><dt>**partial**</dt><dd>Make model class partial</dd></dl>|partial|
|
||||
|modelClassModifier|Model Class Modifier can be nothing or partial| |partial|
|
||||
|newtonsoftVersion|Version for Microsoft.AspNetCore.Mvc.NewtonsoftJson for ASP.NET Core 3.0+| |3.0.0|
|
||||
|operationIsAsync|Set methods to async or sync (default).| |false|
|
||||
|operationModifier|Operation Modifier can be virtual or abstract|<dl><dt>**virtual**</dt><dd>Keep method virtual</dd><dt>**abstract**</dt><dd>Make method abstract</dd></dl>|virtual|
|
||||
|operationModifier|Operation Modifier can be virtual or abstract| |virtual|
|
||||
|operationResultTask|Set methods result to Task<>.| |false|
|
||||
|packageAuthors|Specifies Authors property in the .NET Core project file.| |OpenAPI|
|
||||
|packageCopyright|Specifies an AssemblyCopyright for the .NET Framework global assembly attributes stored in the AssemblyInfo file.| |No Copyright|
|
||||
@@ -32,7 +32,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|
||||
|returnICollection|Return ICollection<T> instead of the concrete type.| |false|
|
||||
|sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true|
|
||||
|sourceFolder|source folder for generated code| |src|
|
||||
|swashbuckleVersion|Swashbuckle version: 3.0.0, 4.0.0, 5.0.0|<dl><dt>**3.0.0**</dt><dd>Swashbuckle 3.0.0</dd><dt>**4.0.0**</dt><dd>Swashbuckle 4.0.0</dd><dt>**5.0.0**</dt><dd>Swashbuckle 5.0.0</dd></dl>|3.0.0|
|
||||
|swashbuckleVersion|Swashbuckle version: 3.0.0, 4.0.0, 5.0.0| |3.0.0|
|
||||
|useCollection|Deserialize array types to Collection<T> instead of List<T>.| |false|
|
||||
|useDateTimeOffset|Use DateTimeOffset to model date-time properties| |false|
|
||||
|useDefaultRouting|Use default routing for the ASP.NET Core version.| |true|
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<groupId>org.openapitools</groupId>
|
||||
<artifactId>openapi-generator-project</artifactId>
|
||||
<!-- RELEASE_VERSION -->
|
||||
<version>5.1.1</version>
|
||||
<version>5.1.1-SNAPSHOT</version>
|
||||
<!-- /RELEASE_VERSION -->
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<artifactId>openapi-generator-project</artifactId>
|
||||
<groupId>org.openapitools</groupId>
|
||||
<!-- RELEASE_VERSION -->
|
||||
<version>5.1.1</version>
|
||||
<version>5.1.1-SNAPSHOT</version>
|
||||
<!-- /RELEASE_VERSION -->
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# RELEASE_VERSION
|
||||
openApiGeneratorVersion=5.1.1
|
||||
openApiGeneratorVersion=5.1.1-SNAPSHOT
|
||||
# /RELEASE_VERSION
|
||||
|
||||
# BEGIN placeholders
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<groupId>org.openapitools</groupId>
|
||||
<artifactId>openapi-generator-project</artifactId>
|
||||
<!-- RELEASE_VERSION -->
|
||||
<version>5.1.1</version>
|
||||
<version>5.1.1-SNAPSHOT</version>
|
||||
<!-- /RELEASE_VERSION -->
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<groupId>org.openapitools</groupId>
|
||||
<artifactId>openapi-generator-maven-plugin</artifactId>
|
||||
<!-- RELEASE_VERSION -->
|
||||
<version>5.1.1</version>
|
||||
<version>5.1.1-SNAPSHOT</version>
|
||||
<!-- /RELEASE_VERSION -->
|
||||
<executions>
|
||||
<execution>
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<groupId>org.openapitools</groupId>
|
||||
<artifactId>openapi-generator-maven-plugin</artifactId>
|
||||
<!-- RELEASE_VERSION -->
|
||||
<version>5.1.1</version>
|
||||
<version>5.1.1-SNAPSHOT</version>
|
||||
<!-- /RELEASE_VERSION -->
|
||||
<dependencies>
|
||||
<dependency>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<groupId>org.openapitools</groupId>
|
||||
<artifactId>openapi-generator-maven-plugin</artifactId>
|
||||
<!-- RELEASE_VERSION -->
|
||||
<version>5.1.1</version>
|
||||
<version>5.1.1-SNAPSHOT</version>
|
||||
<!-- /RELEASE_VERSION -->
|
||||
<executions>
|
||||
<execution>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<groupId>org.openapitools</groupId>
|
||||
<artifactId>openapi-generator-maven-plugin</artifactId>
|
||||
<!-- RELEASE_VERSION -->
|
||||
<version>5.1.1</version>
|
||||
<version>5.1.1-SNAPSHOT</version>
|
||||
<!-- /RELEASE_VERSION -->
|
||||
<executions>
|
||||
<execution>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<groupId>org.openapitools</groupId>
|
||||
<artifactId>openapi-generator-project</artifactId>
|
||||
<!-- RELEASE_VERSION -->
|
||||
<version>5.1.1</version>
|
||||
<version>5.1.1-SNAPSHOT</version>
|
||||
<!-- /RELEASE_VERSION -->
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<groupId>org.openapitools</groupId>
|
||||
<artifactId>openapi-generator-project</artifactId>
|
||||
<!-- RELEASE_VERSION -->
|
||||
<version>5.1.1</version>
|
||||
<version>5.1.1-SNAPSHOT</version>
|
||||
<!-- /RELEASE_VERSION -->
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<groupId>org.openapitools</groupId>
|
||||
<artifactId>openapi-generator-project</artifactId>
|
||||
<!-- RELEASE_VERSION -->
|
||||
<version>5.1.1</version>
|
||||
<version>5.1.1-SNAPSHOT</version>
|
||||
<!-- /RELEASE_VERSION -->
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
@@ -199,14 +199,14 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen {
|
||||
aspnetCoreVersion.addEnum("5.0", "ASP.NET Core 5.0");
|
||||
aspnetCoreVersion.setDefault("3.1");
|
||||
aspnetCoreVersion.setOptValue(aspnetCoreVersion.getDefault());
|
||||
cliOptions.add(aspnetCoreVersion);
|
||||
addOption(aspnetCoreVersion.getOpt(), aspnetCoreVersion.getDescription(), aspnetCoreVersion.getOptValue());
|
||||
|
||||
swashbuckleVersion.addEnum("3.0.0", "Swashbuckle 3.0.0");
|
||||
swashbuckleVersion.addEnum("4.0.0", "Swashbuckle 4.0.0");
|
||||
swashbuckleVersion.addEnum("5.0.0", "Swashbuckle 5.0.0");
|
||||
swashbuckleVersion.setDefault("3.0.0");
|
||||
swashbuckleVersion.setOptValue(swashbuckleVersion.getDefault());
|
||||
cliOptions.add(swashbuckleVersion);
|
||||
addOption(swashbuckleVersion.getOpt(), swashbuckleVersion.getDescription(), swashbuckleVersion.getOptValue());
|
||||
|
||||
// CLI Switches
|
||||
addSwitch(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG,
|
||||
@@ -261,19 +261,19 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen {
|
||||
classModifier.addEnum("abstract", "Make class abstract");
|
||||
classModifier.setDefault("");
|
||||
classModifier.setOptValue(classModifier.getDefault());
|
||||
cliOptions.add(classModifier);
|
||||
addOption(classModifier.getOpt(), classModifier.getDescription(), classModifier.getOptValue());
|
||||
|
||||
operationModifier.addEnum("virtual", "Keep method virtual");
|
||||
operationModifier.addEnum("abstract", "Make method abstract");
|
||||
operationModifier.setDefault("virtual");
|
||||
operationModifier.setOptValue(operationModifier.getDefault());
|
||||
cliOptions.add(operationModifier);
|
||||
addOption(operationModifier.getOpt(), operationModifier.getDescription(), operationModifier.getOptValue());
|
||||
|
||||
buildTarget.addEnum("program", "Generate code for a standalone server");
|
||||
buildTarget.addEnum("library", "Generate code for a server abstract class library");
|
||||
buildTarget.setDefault("program");
|
||||
buildTarget.setOptValue(buildTarget.getDefault());
|
||||
cliOptions.add(buildTarget);
|
||||
addOption(buildTarget.getOpt(), buildTarget.getDescription(), buildTarget.getOptValue());
|
||||
|
||||
addSwitch(GENERATE_BODY,
|
||||
"Generates method body.",
|
||||
@@ -292,7 +292,7 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen {
|
||||
modelClassModifier.addEnum("partial", "Make model class partial");
|
||||
modelClassModifier.setDefault("partial");
|
||||
modelClassModifier.setOptValue(modelClassModifier.getDefault());
|
||||
cliOptions.add(modelClassModifier);
|
||||
addOption(modelClassModifier.getOpt(), modelClassModifier.getDescription(), modelClassModifier.getOptValue());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -592,7 +592,6 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen {
|
||||
private void setBuildTarget() {
|
||||
setCliOption(buildTarget);
|
||||
if ("library".equals(buildTarget.getOptValue())) {
|
||||
LOGGER.warn("buildTarget is {} so changing default isLibrary to true", buildTarget.getOptValue());
|
||||
isLibrary = true;
|
||||
projectSdk = SDK_LIB;
|
||||
additionalProperties.put(CLASS_MODIFIER, "abstract");
|
||||
@@ -637,7 +636,7 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen {
|
||||
|
||||
private void setUseSwashbuckle() {
|
||||
if (isLibrary) {
|
||||
LOGGER.warn("isLibrary is true so changing default useSwashbuckle to false");
|
||||
LOGGER.warn("buildTarget is " + buildTarget.getOptValue() + " so changing default isLibrary to false ");
|
||||
useSwashbuckle = false;
|
||||
} else {
|
||||
useSwashbuckle = true;
|
||||
|
||||
@@ -15,19 +15,9 @@ public:
|
||||
{{classname}}();
|
||||
~{{classname}}();
|
||||
|
||||
/* Sets the URL Endpoint.
|
||||
* Note: several fallback endpoints can be configured in request retry policies, see Request::SetShouldRetry */
|
||||
void SetURL(const FString& Url);
|
||||
|
||||
/* Adds global header params to all requests */
|
||||
void AddHeaderParam(const FString& Key, const FString& Value);
|
||||
void ClearHeaderParams();
|
||||
|
||||
/* Sets the retry manager to the user-defined retry manager. User must manage the lifetime of the retry manager.
|
||||
* If no retry manager is specified and a request needs retries, a default retry manager will be used.
|
||||
* See also: Request::SetShouldRetry */
|
||||
void SetHttpRetryManager(FHttpRetrySystem::FManager& RetryManager);
|
||||
FHttpRetrySystem::FManager& GetHttpRetryManager();
|
||||
|
||||
{{#operations}}{{#operation}}class {{operationIdCamelCase}}Request;
|
||||
class {{operationIdCamelCase}}Response;
|
||||
@@ -37,17 +27,15 @@ public:
|
||||
{{#operations}}{{#operation}}{{#description}}/* {{{description}}} */
|
||||
{{/description}}bool {{operationIdCamelCase}}(const {{operationIdCamelCase}}Request& Request, const F{{operationIdCamelCase}}Delegate& Delegate = F{{operationIdCamelCase}}Delegate()) const;
|
||||
{{/operation}}{{/operations}}
|
||||
|
||||
private:
|
||||
{{#operations}}{{#operation}}void On{{operationIdCamelCase}}Response(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, F{{operationIdCamelCase}}Delegate Delegate) const;
|
||||
{{#operations}}{{#operation}}void On{{operationIdCamelCase}}Response(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, F{{operationIdCamelCase}}Delegate Delegate, int AutoRetryCount) const;
|
||||
{{/operation}}{{/operations}}
|
||||
FHttpRequestRef CreateHttpRequest(const Request& Request) const;
|
||||
bool IsValid() const;
|
||||
void HandleResponse(FHttpResponsePtr HttpResponse, bool bSucceeded, Response& InOutResponse) const;
|
||||
|
||||
FString Url;
|
||||
TMap<FString,FString> AdditionalHeaderParams;
|
||||
mutable FHttpRetrySystem::FManager* RetryManager = nullptr;
|
||||
mutable TUniquePtr<HttpRetryManager> DefaultRetryManager;
|
||||
};
|
||||
|
||||
{{#cppNamespaceDeclarations}}
|
||||
|
||||
@@ -45,40 +45,6 @@ bool {{classname}}::IsValid() const
|
||||
return true;
|
||||
}
|
||||
|
||||
void {{classname}}::SetHttpRetryManager(FHttpRetrySystem::FManager& InRetryManager)
|
||||
{
|
||||
if(RetryManager != &GetHttpRetryManager())
|
||||
{
|
||||
DefaultRetryManager.Reset();
|
||||
RetryManager = &InRetryManager;
|
||||
}
|
||||
}
|
||||
|
||||
FHttpRetrySystem::FManager& {{classname}}::GetHttpRetryManager()
|
||||
{
|
||||
return *RetryManager;
|
||||
}
|
||||
|
||||
FHttpRequestRef {{classname}}::CreateHttpRequest(const Request& Request) const
|
||||
{
|
||||
if (!Request.GetRetryParams().IsSet())
|
||||
{
|
||||
return FHttpModule::Get().CreateRequest();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!RetryManager)
|
||||
{
|
||||
// Create default retry manager if none was specified
|
||||
DefaultRetryManager = MakeUnique<HttpRetryManager>(6, 60);
|
||||
RetryManager = DefaultRetryManager.Get();
|
||||
}
|
||||
|
||||
const HttpRetryParams& Params = Request.GetRetryParams().GetValue();
|
||||
return RetryManager->CreateRequest(Params.RetryLimitCountOverride, Params.RetryTimeoutRelativeSecondsOverride, Params.RetryResponseCodes, Params.RetryVerbs, Params.RetryDomains);
|
||||
}
|
||||
}
|
||||
|
||||
void {{classname}}::HandleResponse(FHttpResponsePtr HttpResponse, bool bSucceeded, Response& InOutResponse) const
|
||||
{
|
||||
InOutResponse.SetHttpResponse(HttpResponse);
|
||||
@@ -130,7 +96,7 @@ bool {{classname}}::{{operationIdCamelCase}}(const {{operationIdCamelCase}}Reque
|
||||
if (!IsValid())
|
||||
return false;
|
||||
|
||||
FHttpRequestRef HttpRequest = CreateHttpRequest(Request);
|
||||
FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest();
|
||||
HttpRequest->SetURL(*(Url + Request.ComputePath()));
|
||||
|
||||
for(const auto& It : AdditionalHeaderParams)
|
||||
@@ -140,15 +106,26 @@ bool {{classname}}::{{operationIdCamelCase}}(const {{operationIdCamelCase}}Reque
|
||||
|
||||
Request.SetupHttpRequest(HttpRequest);
|
||||
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &{{classname}}::On{{operationIdCamelCase}}Response, Delegate);
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &{{classname}}::On{{operationIdCamelCase}}Response, Delegate, Request.GetAutoRetryCount());
|
||||
return HttpRequest->ProcessRequest();
|
||||
}
|
||||
|
||||
void {{classname}}::On{{operationIdCamelCase}}Response(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, F{{operationIdCamelCase}}Delegate Delegate) const
|
||||
void {{classname}}::On{{operationIdCamelCase}}Response(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, F{{operationIdCamelCase}}Delegate Delegate, int AutoRetryCount) const
|
||||
{
|
||||
{{operationIdCamelCase}}Response Response;
|
||||
Response.SetHttpRequest(HttpRequest);
|
||||
|
||||
HandleResponse(HttpResponse, bSucceeded, Response);
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
|
||||
if(!Response.IsSuccessful() && AutoRetryCount > 0)
|
||||
{
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &{{classname}}::On{{operationIdCamelCase}}Response, Delegate, AutoRetryCount - 1);
|
||||
Response.AsyncRetry();
|
||||
}
|
||||
else
|
||||
{
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
}
|
||||
}
|
||||
|
||||
{{/operation}}
|
||||
|
||||
@@ -5,8 +5,6 @@
|
||||
#include "Interfaces/IHttpResponse.h"
|
||||
#include "Serialization/JsonWriter.h"
|
||||
#include "Dom/JsonObject.h"
|
||||
#include "HttpRetrySystem.h"
|
||||
#include "Containers/Ticker.h"
|
||||
|
||||
{{#cppNamespaceDeclarations}}
|
||||
namespace {{this}}
|
||||
@@ -14,31 +12,6 @@ namespace {{this}}
|
||||
{{/cppNamespaceDeclarations}}
|
||||
|
||||
typedef TSharedRef<TJsonWriter<>> JsonWriter;
|
||||
using namespace FHttpRetrySystem;
|
||||
|
||||
struct {{dllapi}} HttpRetryManager : public FManager, public FTickerObjectBase
|
||||
{
|
||||
using FManager::FManager;
|
||||
|
||||
bool Tick(float DeltaTime) final;
|
||||
};
|
||||
|
||||
struct {{dllapi}} HttpRetryParams
|
||||
{
|
||||
HttpRetryParams(
|
||||
const FRetryLimitCountSetting& InRetryLimitCountOverride = FRetryLimitCountSetting(),
|
||||
const FRetryTimeoutRelativeSecondsSetting& InRetryTimeoutRelativeSecondsOverride = FRetryTimeoutRelativeSecondsSetting(),
|
||||
const FRetryResponseCodes& InRetryResponseCodes = FRetryResponseCodes(),
|
||||
const FRetryVerbs& InRetryVerbs = FRetryVerbs(),
|
||||
const FRetryDomainsPtr& InRetryDomains = FRetryDomainsPtr()
|
||||
);
|
||||
|
||||
FRetryLimitCountSetting RetryLimitCountOverride;
|
||||
FRetryTimeoutRelativeSecondsSetting RetryTimeoutRelativeSecondsOverride;
|
||||
FRetryResponseCodes RetryResponseCodes;
|
||||
FRetryVerbs RetryVerbs;
|
||||
FRetryDomainsPtr RetryDomains;
|
||||
};
|
||||
|
||||
class {{dllapi}} Model
|
||||
{
|
||||
@@ -55,12 +28,11 @@ public:
|
||||
virtual void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const = 0;
|
||||
virtual FString ComputePath() const = 0;
|
||||
|
||||
/* Enables retry and optionally sets a retry policy for this request */
|
||||
void SetShouldRetry(const HttpRetryParams& Params = HttpRetryParams()) { RetryParams = Params; }
|
||||
const TOptional<HttpRetryParams>& GetRetryParams() const { return RetryParams; }
|
||||
void SetAutoRetryCount(int InCount) { AutoRetryCount = InCount; }
|
||||
int GetAutoRetryCount() const { return AutoRetryCount; }
|
||||
|
||||
private:
|
||||
TOptional<HttpRetryParams> RetryParams;
|
||||
int AutoRetryCount = 0;
|
||||
};
|
||||
|
||||
class {{dllapi}} Response
|
||||
@@ -72,6 +44,8 @@ public:
|
||||
void SetSuccessful(bool InSuccessful) { Successful = InSuccessful; }
|
||||
bool IsSuccessful() const { return Successful; }
|
||||
|
||||
void AsyncRetry() const;
|
||||
|
||||
virtual void SetHttpResponseCode(EHttpResponseCodes::Type InHttpResponseCode);
|
||||
EHttpResponseCodes::Type GetHttpResponseCode() const { return ResponseCode; }
|
||||
|
||||
@@ -81,11 +55,15 @@ public:
|
||||
void SetHttpResponse(const FHttpResponsePtr& InHttpResponse) { HttpResponse = InHttpResponse; }
|
||||
const FHttpResponsePtr& GetHttpResponse() const { return HttpResponse; }
|
||||
|
||||
void SetHttpRequest(const FHttpRequestPtr& InHttpRequest) { HttpRequest = InHttpRequest; }
|
||||
const FHttpRequestPtr& GetHttpRequest() const { return HttpRequest; }
|
||||
|
||||
private:
|
||||
bool Successful;
|
||||
EHttpResponseCodes::Type ResponseCode;
|
||||
FString ResponseString;
|
||||
FHttpResponsePtr HttpResponse;
|
||||
FHttpRequestPtr HttpRequest;
|
||||
};
|
||||
|
||||
{{#cppNamespaceDeclarations}}
|
||||
|
||||
@@ -1,30 +1,13 @@
|
||||
{{>licenseInfo}}
|
||||
#include "{{modelNamePrefix}}BaseModel.h"
|
||||
|
||||
#include "Async/Async.h"
|
||||
|
||||
{{#cppNamespaceDeclarations}}
|
||||
namespace {{this}}
|
||||
{
|
||||
{{/cppNamespaceDeclarations}}
|
||||
|
||||
bool HttpRetryManager::Tick(float DeltaTime)
|
||||
{
|
||||
FManager::Update();
|
||||
return true;
|
||||
}
|
||||
|
||||
HttpRetryParams::HttpRetryParams(const FRetryLimitCountSetting& InRetryLimitCountOverride /*= FRetryLimitCountSetting()*/,
|
||||
const FRetryTimeoutRelativeSecondsSetting& InRetryTimeoutRelativeSecondsOverride /*= FRetryTimeoutRelativeSecondsSetting()*/,
|
||||
const FRetryResponseCodes& InRetryResponseCodes /*= FRetryResponseCodes()*/,
|
||||
const FRetryVerbs& InRetryVerbs /*= FRetryVerbs()*/,
|
||||
const FRetryDomainsPtr& InRetryDomains /*= FRetryDomainsPtr() */)
|
||||
: RetryLimitCountOverride(InRetryLimitCountOverride)
|
||||
, RetryTimeoutRelativeSecondsOverride(InRetryTimeoutRelativeSecondsOverride)
|
||||
, RetryResponseCodes(InRetryResponseCodes)
|
||||
, RetryVerbs(InRetryVerbs)
|
||||
, RetryDomains(InRetryDomains)
|
||||
{
|
||||
}
|
||||
|
||||
void Response::SetHttpResponseCode(EHttpResponseCodes::Type InHttpResponseCode)
|
||||
{
|
||||
ResponseCode = InHttpResponseCode;
|
||||
@@ -35,6 +18,15 @@ void Response::SetHttpResponseCode(EHttpResponseCodes::Type InHttpResponseCode)
|
||||
}
|
||||
}
|
||||
|
||||
void Response::AsyncRetry() const
|
||||
{
|
||||
// Unfortunately, it is currently usafe to call ProcessRequest() directly here.
|
||||
// This is because the HttpManager will remove all references to this HttpRequest in FHttpManager::Tick including the new request we just added, instead of removing just one.
|
||||
// This will lead to the request's destruction and eventually a crash.
|
||||
// The only solution is therefore to ensure we are taking an extra reference to the request, and that the request is added after the queue is flushed.
|
||||
Async(EAsyncExecution::TaskGraph, [AddRef = FHttpRequestPtr(GetHttpRequest())](){ AddRef->ProcessRequest(); });
|
||||
}
|
||||
|
||||
{{#cppNamespaceDeclarations}}
|
||||
}
|
||||
{{/cppNamespaceDeclarations}}
|
||||
@@ -98,13 +98,13 @@ namespace {{packageName}}.Client
|
||||
|
||||
if (type == typeof(byte[])) // return byte array
|
||||
{
|
||||
return response.Content.ReadAsByteArrayAsync().GetAwaiter().GetResult();
|
||||
return response.Content.ReadAsByteArrayAsync().Result;
|
||||
}
|
||||
|
||||
// TODO: ? if (type.IsAssignableFrom(typeof(Stream)))
|
||||
if (type == typeof(Stream))
|
||||
{
|
||||
var bytes = response.Content.ReadAsByteArrayAsync().GetAwaiter().GetResult();
|
||||
var bytes = response.Content.ReadAsByteArrayAsync().Result;
|
||||
if (headers != null)
|
||||
{
|
||||
var filePath = String.IsNullOrEmpty(_configuration.TempFolderPath)
|
||||
@@ -128,18 +128,18 @@ namespace {{packageName}}.Client
|
||||
|
||||
if (type.Name.StartsWith("System.Nullable`1[[System.DateTime")) // return a datetime object
|
||||
{
|
||||
return DateTime.Parse(response.Content.ReadAsStringAsync().GetAwaiter().GetResult(), null, System.Globalization.DateTimeStyles.RoundtripKind);
|
||||
return DateTime.Parse(response.Content.ReadAsStringAsync().Result, null, System.Globalization.DateTimeStyles.RoundtripKind);
|
||||
}
|
||||
|
||||
if (type == typeof(String) || type.Name.StartsWith("System.Nullable")) // return primitive type
|
||||
{
|
||||
return Convert.ChangeType(response.Content.ReadAsStringAsync().GetAwaiter().GetResult(), type);
|
||||
return Convert.ChangeType(response.Content.ReadAsStringAsync().Result, type);
|
||||
}
|
||||
|
||||
// at this point, it must be a model (json)
|
||||
try
|
||||
{
|
||||
return JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().GetAwaiter().GetResult(), type, _serializerSettings);
|
||||
return JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().Result, type, _serializerSettings);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@@ -401,10 +401,10 @@ namespace {{packageName}}.Client
|
||||
partial void InterceptRequest(HttpRequestMessage req);
|
||||
partial void InterceptResponse(HttpRequestMessage req, HttpResponseMessage response);
|
||||
|
||||
private async Task<ApiResponse<T>> ToApiResponse<T>(HttpResponseMessage response, object responseData, Uri uri)
|
||||
private ApiResponse<T> ToApiResponse<T>(HttpResponseMessage response, object responseData, Uri uri)
|
||||
{
|
||||
T result = (T) responseData;
|
||||
string rawContent = await response.Content.ReadAsStringAsync();
|
||||
string rawContent = response.Content.ToString();
|
||||
|
||||
var transformed = new ApiResponse<T>(response.StatusCode, new Multimap<string, string>({{#caseInsensitiveResponseHeaders}}StringComparer.OrdinalIgnoreCase{{/caseInsensitiveResponseHeaders}}), result, rawContent)
|
||||
{
|
||||
@@ -446,7 +446,7 @@ namespace {{packageName}}.Client
|
||||
|
||||
private ApiResponse<T> Exec<T>(HttpRequestMessage req, IReadableConfiguration configuration)
|
||||
{
|
||||
return ExecAsync<T>(req, configuration).GetAwaiter().GetResult();
|
||||
return ExecAsync<T>(req, configuration).Result;
|
||||
}
|
||||
|
||||
private async Task<ApiResponse<T>> ExecAsync<T>(HttpRequestMessage req,
|
||||
@@ -511,11 +511,6 @@ namespace {{packageName}}.Client
|
||||
}
|
||||
{{/supportsRetry}}
|
||||
|
||||
if (!response.IsSuccessStatusCode)
|
||||
{
|
||||
return await ToApiResponse<T>(response, default(T), req.RequestUri);
|
||||
}
|
||||
|
||||
object responseData = deserializer.Deserialize<T>(response);
|
||||
|
||||
// if the response type is oneOf/anyOf, call FromJSON to deserialize the data
|
||||
@@ -530,7 +525,9 @@ namespace {{packageName}}.Client
|
||||
|
||||
InterceptResponse(req, response);
|
||||
|
||||
return await ToApiResponse<T>(response, responseData, req.RequestUri);
|
||||
var result = ToApiResponse<T>(response, responseData, req.RequestUri);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
{{#supportsAsync}}
|
||||
|
||||
@@ -97,7 +97,7 @@ import {{packageName}}.infrastructure.toMultiValue
|
||||
{{/hasQueryParams}}
|
||||
val localVariableHeaders: MutableMap<String, String> = mutableMapOf({{#hasFormParams}}"Content-Type" to {{^consumes}}"multipart/form-data"{{/consumes}}{{#consumes.0}}"{{{mediaType}}}"{{/consumes.0}}{{/hasFormParams}})
|
||||
{{#headerParams}}
|
||||
{{{paramName}}}{{^required}}?{{/required}}.apply { localVariableHeaders["{{baseName}}"] = {{#isContainer}}this.joinToString(separator = collectionDelimiter("{{collectionFormat}}")){{/isContainer}}{{^isContainer}}this.toString(){{/isContainer}} }
|
||||
{{{paramName}}}?.apply { localVariableHeaders["{{baseName}}"] = {{#isContainer}}this.joinToString(separator = collectionDelimiter("{{collectionFormat}}")){{/isContainer}}{{^isContainer}}this.toString(){{/isContainer}} }
|
||||
{{/headerParams}}
|
||||
|
||||
val localVariableConfig = RequestConfig(
|
||||
|
||||
2
pom.xml
2
pom.xml
@@ -10,7 +10,7 @@
|
||||
<packaging>pom</packaging>
|
||||
<name>openapi-generator-project</name>
|
||||
<!-- RELEASE_VERSION -->
|
||||
<version>5.1.1</version>
|
||||
<version>5.1.1-SNAPSHOT</version>
|
||||
<!-- /RELEASE_VERSION -->
|
||||
<url>https://github.com/openapitools/openapi-generator</url>
|
||||
<scm>
|
||||
|
||||
@@ -1 +1 @@
|
||||
5.1.1
|
||||
5.1.1-SNAPSHOT
|
||||
@@ -1 +1 @@
|
||||
5.1.1
|
||||
5.1.1-SNAPSHOT
|
||||
@@ -1 +1 @@
|
||||
5.1.1
|
||||
5.1.1-SNAPSHOT
|
||||
@@ -1 +1 @@
|
||||
5.1.1
|
||||
5.1.1-SNAPSHOT
|
||||
@@ -1 +1 @@
|
||||
5.1.1
|
||||
5.1.1-SNAPSHOT
|
||||
@@ -1 +1 @@
|
||||
5.1.1
|
||||
5.1.1-SNAPSHOT
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* The version of the OpenAPI document: 1.0.0
|
||||
*
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1.
|
||||
* NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT.
|
||||
* https://openapi-generator.tech
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
@@ -12,28 +12,11 @@
|
||||
|
||||
#include "OpenAPIBaseModel.h"
|
||||
|
||||
#include "Async/Async.h"
|
||||
|
||||
namespace OpenAPI
|
||||
{
|
||||
|
||||
bool HttpRetryManager::Tick(float DeltaTime)
|
||||
{
|
||||
FManager::Update();
|
||||
return true;
|
||||
}
|
||||
|
||||
HttpRetryParams::HttpRetryParams(const FRetryLimitCountSetting& InRetryLimitCountOverride /*= FRetryLimitCountSetting()*/,
|
||||
const FRetryTimeoutRelativeSecondsSetting& InRetryTimeoutRelativeSecondsOverride /*= FRetryTimeoutRelativeSecondsSetting()*/,
|
||||
const FRetryResponseCodes& InRetryResponseCodes /*= FRetryResponseCodes()*/,
|
||||
const FRetryVerbs& InRetryVerbs /*= FRetryVerbs()*/,
|
||||
const FRetryDomainsPtr& InRetryDomains /*= FRetryDomainsPtr() */)
|
||||
: RetryLimitCountOverride(InRetryLimitCountOverride)
|
||||
, RetryTimeoutRelativeSecondsOverride(InRetryTimeoutRelativeSecondsOverride)
|
||||
, RetryResponseCodes(InRetryResponseCodes)
|
||||
, RetryVerbs(InRetryVerbs)
|
||||
, RetryDomains(InRetryDomains)
|
||||
{
|
||||
}
|
||||
|
||||
void Response::SetHttpResponseCode(EHttpResponseCodes::Type InHttpResponseCode)
|
||||
{
|
||||
ResponseCode = InHttpResponseCode;
|
||||
@@ -44,4 +27,13 @@ void Response::SetHttpResponseCode(EHttpResponseCodes::Type InHttpResponseCode)
|
||||
}
|
||||
}
|
||||
|
||||
void Response::AsyncRetry() const
|
||||
{
|
||||
// Unfortunately, it is currently usafe to call ProcessRequest() directly here.
|
||||
// This is because the HttpManager will remove all references to this HttpRequest in FHttpManager::Tick including the new request we just added, instead of removing just one.
|
||||
// This will lead to the request's destruction and eventually a crash.
|
||||
// The only solution is therefore to ensure we are taking an extra reference to the request, and that the request is added after the queue is flushed.
|
||||
Async(EAsyncExecution::TaskGraph, [AddRef = FHttpRequestPtr(GetHttpRequest())](){ AddRef->ProcessRequest(); });
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -54,40 +54,6 @@ bool OpenAPIPetApi::IsValid() const
|
||||
return true;
|
||||
}
|
||||
|
||||
void OpenAPIPetApi::SetHttpRetryManager(FHttpRetrySystem::FManager& InRetryManager)
|
||||
{
|
||||
if(RetryManager != &GetHttpRetryManager())
|
||||
{
|
||||
DefaultRetryManager.Reset();
|
||||
RetryManager = &InRetryManager;
|
||||
}
|
||||
}
|
||||
|
||||
FHttpRetrySystem::FManager& OpenAPIPetApi::GetHttpRetryManager()
|
||||
{
|
||||
return *RetryManager;
|
||||
}
|
||||
|
||||
FHttpRequestRef OpenAPIPetApi::CreateHttpRequest(const Request& Request) const
|
||||
{
|
||||
if (!Request.GetRetryParams().IsSet())
|
||||
{
|
||||
return FHttpModule::Get().CreateRequest();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!RetryManager)
|
||||
{
|
||||
// Create default retry manager if none was specified
|
||||
DefaultRetryManager = MakeUnique<HttpRetryManager>(6, 60);
|
||||
RetryManager = DefaultRetryManager.Get();
|
||||
}
|
||||
|
||||
const HttpRetryParams& Params = Request.GetRetryParams().GetValue();
|
||||
return RetryManager->CreateRequest(Params.RetryLimitCountOverride, Params.RetryTimeoutRelativeSecondsOverride, Params.RetryResponseCodes, Params.RetryVerbs, Params.RetryDomains);
|
||||
}
|
||||
}
|
||||
|
||||
void OpenAPIPetApi::HandleResponse(FHttpResponsePtr HttpResponse, bool bSucceeded, Response& InOutResponse) const
|
||||
{
|
||||
InOutResponse.SetHttpResponse(HttpResponse);
|
||||
@@ -137,7 +103,7 @@ bool OpenAPIPetApi::AddPet(const AddPetRequest& Request, const FAddPetDelegate&
|
||||
if (!IsValid())
|
||||
return false;
|
||||
|
||||
FHttpRequestRef HttpRequest = CreateHttpRequest(Request);
|
||||
FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest();
|
||||
HttpRequest->SetURL(*(Url + Request.ComputePath()));
|
||||
|
||||
for(const auto& It : AdditionalHeaderParams)
|
||||
@@ -147,15 +113,26 @@ bool OpenAPIPetApi::AddPet(const AddPetRequest& Request, const FAddPetDelegate&
|
||||
|
||||
Request.SetupHttpRequest(HttpRequest);
|
||||
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnAddPetResponse, Delegate);
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnAddPetResponse, Delegate, Request.GetAutoRetryCount());
|
||||
return HttpRequest->ProcessRequest();
|
||||
}
|
||||
|
||||
void OpenAPIPetApi::OnAddPetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FAddPetDelegate Delegate) const
|
||||
void OpenAPIPetApi::OnAddPetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FAddPetDelegate Delegate, int AutoRetryCount) const
|
||||
{
|
||||
AddPetResponse Response;
|
||||
Response.SetHttpRequest(HttpRequest);
|
||||
|
||||
HandleResponse(HttpResponse, bSucceeded, Response);
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
|
||||
if(!Response.IsSuccessful() && AutoRetryCount > 0)
|
||||
{
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnAddPetResponse, Delegate, AutoRetryCount - 1);
|
||||
Response.AsyncRetry();
|
||||
}
|
||||
else
|
||||
{
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
}
|
||||
}
|
||||
|
||||
bool OpenAPIPetApi::DeletePet(const DeletePetRequest& Request, const FDeletePetDelegate& Delegate /*= FDeletePetDelegate()*/) const
|
||||
@@ -163,7 +140,7 @@ bool OpenAPIPetApi::DeletePet(const DeletePetRequest& Request, const FDeletePetD
|
||||
if (!IsValid())
|
||||
return false;
|
||||
|
||||
FHttpRequestRef HttpRequest = CreateHttpRequest(Request);
|
||||
FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest();
|
||||
HttpRequest->SetURL(*(Url + Request.ComputePath()));
|
||||
|
||||
for(const auto& It : AdditionalHeaderParams)
|
||||
@@ -173,15 +150,26 @@ bool OpenAPIPetApi::DeletePet(const DeletePetRequest& Request, const FDeletePetD
|
||||
|
||||
Request.SetupHttpRequest(HttpRequest);
|
||||
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnDeletePetResponse, Delegate);
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnDeletePetResponse, Delegate, Request.GetAutoRetryCount());
|
||||
return HttpRequest->ProcessRequest();
|
||||
}
|
||||
|
||||
void OpenAPIPetApi::OnDeletePetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeletePetDelegate Delegate) const
|
||||
void OpenAPIPetApi::OnDeletePetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeletePetDelegate Delegate, int AutoRetryCount) const
|
||||
{
|
||||
DeletePetResponse Response;
|
||||
Response.SetHttpRequest(HttpRequest);
|
||||
|
||||
HandleResponse(HttpResponse, bSucceeded, Response);
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
|
||||
if(!Response.IsSuccessful() && AutoRetryCount > 0)
|
||||
{
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnDeletePetResponse, Delegate, AutoRetryCount - 1);
|
||||
Response.AsyncRetry();
|
||||
}
|
||||
else
|
||||
{
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
}
|
||||
}
|
||||
|
||||
bool OpenAPIPetApi::FindPetsByStatus(const FindPetsByStatusRequest& Request, const FFindPetsByStatusDelegate& Delegate /*= FFindPetsByStatusDelegate()*/) const
|
||||
@@ -189,7 +177,7 @@ bool OpenAPIPetApi::FindPetsByStatus(const FindPetsByStatusRequest& Request, con
|
||||
if (!IsValid())
|
||||
return false;
|
||||
|
||||
FHttpRequestRef HttpRequest = CreateHttpRequest(Request);
|
||||
FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest();
|
||||
HttpRequest->SetURL(*(Url + Request.ComputePath()));
|
||||
|
||||
for(const auto& It : AdditionalHeaderParams)
|
||||
@@ -199,15 +187,26 @@ bool OpenAPIPetApi::FindPetsByStatus(const FindPetsByStatusRequest& Request, con
|
||||
|
||||
Request.SetupHttpRequest(HttpRequest);
|
||||
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnFindPetsByStatusResponse, Delegate);
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnFindPetsByStatusResponse, Delegate, Request.GetAutoRetryCount());
|
||||
return HttpRequest->ProcessRequest();
|
||||
}
|
||||
|
||||
void OpenAPIPetApi::OnFindPetsByStatusResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FFindPetsByStatusDelegate Delegate) const
|
||||
void OpenAPIPetApi::OnFindPetsByStatusResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FFindPetsByStatusDelegate Delegate, int AutoRetryCount) const
|
||||
{
|
||||
FindPetsByStatusResponse Response;
|
||||
Response.SetHttpRequest(HttpRequest);
|
||||
|
||||
HandleResponse(HttpResponse, bSucceeded, Response);
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
|
||||
if(!Response.IsSuccessful() && AutoRetryCount > 0)
|
||||
{
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnFindPetsByStatusResponse, Delegate, AutoRetryCount - 1);
|
||||
Response.AsyncRetry();
|
||||
}
|
||||
else
|
||||
{
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
}
|
||||
}
|
||||
|
||||
bool OpenAPIPetApi::FindPetsByTags(const FindPetsByTagsRequest& Request, const FFindPetsByTagsDelegate& Delegate /*= FFindPetsByTagsDelegate()*/) const
|
||||
@@ -215,7 +214,7 @@ bool OpenAPIPetApi::FindPetsByTags(const FindPetsByTagsRequest& Request, const F
|
||||
if (!IsValid())
|
||||
return false;
|
||||
|
||||
FHttpRequestRef HttpRequest = CreateHttpRequest(Request);
|
||||
FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest();
|
||||
HttpRequest->SetURL(*(Url + Request.ComputePath()));
|
||||
|
||||
for(const auto& It : AdditionalHeaderParams)
|
||||
@@ -225,15 +224,26 @@ bool OpenAPIPetApi::FindPetsByTags(const FindPetsByTagsRequest& Request, const F
|
||||
|
||||
Request.SetupHttpRequest(HttpRequest);
|
||||
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnFindPetsByTagsResponse, Delegate);
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnFindPetsByTagsResponse, Delegate, Request.GetAutoRetryCount());
|
||||
return HttpRequest->ProcessRequest();
|
||||
}
|
||||
|
||||
void OpenAPIPetApi::OnFindPetsByTagsResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FFindPetsByTagsDelegate Delegate) const
|
||||
void OpenAPIPetApi::OnFindPetsByTagsResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FFindPetsByTagsDelegate Delegate, int AutoRetryCount) const
|
||||
{
|
||||
FindPetsByTagsResponse Response;
|
||||
Response.SetHttpRequest(HttpRequest);
|
||||
|
||||
HandleResponse(HttpResponse, bSucceeded, Response);
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
|
||||
if(!Response.IsSuccessful() && AutoRetryCount > 0)
|
||||
{
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnFindPetsByTagsResponse, Delegate, AutoRetryCount - 1);
|
||||
Response.AsyncRetry();
|
||||
}
|
||||
else
|
||||
{
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
}
|
||||
}
|
||||
|
||||
bool OpenAPIPetApi::GetPetById(const GetPetByIdRequest& Request, const FGetPetByIdDelegate& Delegate /*= FGetPetByIdDelegate()*/) const
|
||||
@@ -241,7 +251,7 @@ bool OpenAPIPetApi::GetPetById(const GetPetByIdRequest& Request, const FGetPetBy
|
||||
if (!IsValid())
|
||||
return false;
|
||||
|
||||
FHttpRequestRef HttpRequest = CreateHttpRequest(Request);
|
||||
FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest();
|
||||
HttpRequest->SetURL(*(Url + Request.ComputePath()));
|
||||
|
||||
for(const auto& It : AdditionalHeaderParams)
|
||||
@@ -251,15 +261,26 @@ bool OpenAPIPetApi::GetPetById(const GetPetByIdRequest& Request, const FGetPetBy
|
||||
|
||||
Request.SetupHttpRequest(HttpRequest);
|
||||
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnGetPetByIdResponse, Delegate);
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnGetPetByIdResponse, Delegate, Request.GetAutoRetryCount());
|
||||
return HttpRequest->ProcessRequest();
|
||||
}
|
||||
|
||||
void OpenAPIPetApi::OnGetPetByIdResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetPetByIdDelegate Delegate) const
|
||||
void OpenAPIPetApi::OnGetPetByIdResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetPetByIdDelegate Delegate, int AutoRetryCount) const
|
||||
{
|
||||
GetPetByIdResponse Response;
|
||||
Response.SetHttpRequest(HttpRequest);
|
||||
|
||||
HandleResponse(HttpResponse, bSucceeded, Response);
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
|
||||
if(!Response.IsSuccessful() && AutoRetryCount > 0)
|
||||
{
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnGetPetByIdResponse, Delegate, AutoRetryCount - 1);
|
||||
Response.AsyncRetry();
|
||||
}
|
||||
else
|
||||
{
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
}
|
||||
}
|
||||
|
||||
bool OpenAPIPetApi::UpdatePet(const UpdatePetRequest& Request, const FUpdatePetDelegate& Delegate /*= FUpdatePetDelegate()*/) const
|
||||
@@ -267,7 +288,7 @@ bool OpenAPIPetApi::UpdatePet(const UpdatePetRequest& Request, const FUpdatePetD
|
||||
if (!IsValid())
|
||||
return false;
|
||||
|
||||
FHttpRequestRef HttpRequest = CreateHttpRequest(Request);
|
||||
FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest();
|
||||
HttpRequest->SetURL(*(Url + Request.ComputePath()));
|
||||
|
||||
for(const auto& It : AdditionalHeaderParams)
|
||||
@@ -277,15 +298,26 @@ bool OpenAPIPetApi::UpdatePet(const UpdatePetRequest& Request, const FUpdatePetD
|
||||
|
||||
Request.SetupHttpRequest(HttpRequest);
|
||||
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUpdatePetResponse, Delegate);
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUpdatePetResponse, Delegate, Request.GetAutoRetryCount());
|
||||
return HttpRequest->ProcessRequest();
|
||||
}
|
||||
|
||||
void OpenAPIPetApi::OnUpdatePetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdatePetDelegate Delegate) const
|
||||
void OpenAPIPetApi::OnUpdatePetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdatePetDelegate Delegate, int AutoRetryCount) const
|
||||
{
|
||||
UpdatePetResponse Response;
|
||||
Response.SetHttpRequest(HttpRequest);
|
||||
|
||||
HandleResponse(HttpResponse, bSucceeded, Response);
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
|
||||
if(!Response.IsSuccessful() && AutoRetryCount > 0)
|
||||
{
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUpdatePetResponse, Delegate, AutoRetryCount - 1);
|
||||
Response.AsyncRetry();
|
||||
}
|
||||
else
|
||||
{
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
}
|
||||
}
|
||||
|
||||
bool OpenAPIPetApi::UpdatePetWithForm(const UpdatePetWithFormRequest& Request, const FUpdatePetWithFormDelegate& Delegate /*= FUpdatePetWithFormDelegate()*/) const
|
||||
@@ -293,7 +325,7 @@ bool OpenAPIPetApi::UpdatePetWithForm(const UpdatePetWithFormRequest& Request, c
|
||||
if (!IsValid())
|
||||
return false;
|
||||
|
||||
FHttpRequestRef HttpRequest = CreateHttpRequest(Request);
|
||||
FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest();
|
||||
HttpRequest->SetURL(*(Url + Request.ComputePath()));
|
||||
|
||||
for(const auto& It : AdditionalHeaderParams)
|
||||
@@ -303,15 +335,26 @@ bool OpenAPIPetApi::UpdatePetWithForm(const UpdatePetWithFormRequest& Request, c
|
||||
|
||||
Request.SetupHttpRequest(HttpRequest);
|
||||
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUpdatePetWithFormResponse, Delegate);
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUpdatePetWithFormResponse, Delegate, Request.GetAutoRetryCount());
|
||||
return HttpRequest->ProcessRequest();
|
||||
}
|
||||
|
||||
void OpenAPIPetApi::OnUpdatePetWithFormResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdatePetWithFormDelegate Delegate) const
|
||||
void OpenAPIPetApi::OnUpdatePetWithFormResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdatePetWithFormDelegate Delegate, int AutoRetryCount) const
|
||||
{
|
||||
UpdatePetWithFormResponse Response;
|
||||
Response.SetHttpRequest(HttpRequest);
|
||||
|
||||
HandleResponse(HttpResponse, bSucceeded, Response);
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
|
||||
if(!Response.IsSuccessful() && AutoRetryCount > 0)
|
||||
{
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUpdatePetWithFormResponse, Delegate, AutoRetryCount - 1);
|
||||
Response.AsyncRetry();
|
||||
}
|
||||
else
|
||||
{
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
}
|
||||
}
|
||||
|
||||
bool OpenAPIPetApi::UploadFile(const UploadFileRequest& Request, const FUploadFileDelegate& Delegate /*= FUploadFileDelegate()*/) const
|
||||
@@ -319,7 +362,7 @@ bool OpenAPIPetApi::UploadFile(const UploadFileRequest& Request, const FUploadFi
|
||||
if (!IsValid())
|
||||
return false;
|
||||
|
||||
FHttpRequestRef HttpRequest = CreateHttpRequest(Request);
|
||||
FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest();
|
||||
HttpRequest->SetURL(*(Url + Request.ComputePath()));
|
||||
|
||||
for(const auto& It : AdditionalHeaderParams)
|
||||
@@ -329,15 +372,26 @@ bool OpenAPIPetApi::UploadFile(const UploadFileRequest& Request, const FUploadFi
|
||||
|
||||
Request.SetupHttpRequest(HttpRequest);
|
||||
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUploadFileResponse, Delegate);
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUploadFileResponse, Delegate, Request.GetAutoRetryCount());
|
||||
return HttpRequest->ProcessRequest();
|
||||
}
|
||||
|
||||
void OpenAPIPetApi::OnUploadFileResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUploadFileDelegate Delegate) const
|
||||
void OpenAPIPetApi::OnUploadFileResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUploadFileDelegate Delegate, int AutoRetryCount) const
|
||||
{
|
||||
UploadFileResponse Response;
|
||||
Response.SetHttpRequest(HttpRequest);
|
||||
|
||||
HandleResponse(HttpResponse, bSucceeded, Response);
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
|
||||
if(!Response.IsSuccessful() && AutoRetryCount > 0)
|
||||
{
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUploadFileResponse, Delegate, AutoRetryCount - 1);
|
||||
Response.AsyncRetry();
|
||||
}
|
||||
else
|
||||
{
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -54,40 +54,6 @@ bool OpenAPIStoreApi::IsValid() const
|
||||
return true;
|
||||
}
|
||||
|
||||
void OpenAPIStoreApi::SetHttpRetryManager(FHttpRetrySystem::FManager& InRetryManager)
|
||||
{
|
||||
if(RetryManager != &GetHttpRetryManager())
|
||||
{
|
||||
DefaultRetryManager.Reset();
|
||||
RetryManager = &InRetryManager;
|
||||
}
|
||||
}
|
||||
|
||||
FHttpRetrySystem::FManager& OpenAPIStoreApi::GetHttpRetryManager()
|
||||
{
|
||||
return *RetryManager;
|
||||
}
|
||||
|
||||
FHttpRequestRef OpenAPIStoreApi::CreateHttpRequest(const Request& Request) const
|
||||
{
|
||||
if (!Request.GetRetryParams().IsSet())
|
||||
{
|
||||
return FHttpModule::Get().CreateRequest();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!RetryManager)
|
||||
{
|
||||
// Create default retry manager if none was specified
|
||||
DefaultRetryManager = MakeUnique<HttpRetryManager>(6, 60);
|
||||
RetryManager = DefaultRetryManager.Get();
|
||||
}
|
||||
|
||||
const HttpRetryParams& Params = Request.GetRetryParams().GetValue();
|
||||
return RetryManager->CreateRequest(Params.RetryLimitCountOverride, Params.RetryTimeoutRelativeSecondsOverride, Params.RetryResponseCodes, Params.RetryVerbs, Params.RetryDomains);
|
||||
}
|
||||
}
|
||||
|
||||
void OpenAPIStoreApi::HandleResponse(FHttpResponsePtr HttpResponse, bool bSucceeded, Response& InOutResponse) const
|
||||
{
|
||||
InOutResponse.SetHttpResponse(HttpResponse);
|
||||
@@ -137,7 +103,7 @@ bool OpenAPIStoreApi::DeleteOrder(const DeleteOrderRequest& Request, const FDele
|
||||
if (!IsValid())
|
||||
return false;
|
||||
|
||||
FHttpRequestRef HttpRequest = CreateHttpRequest(Request);
|
||||
FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest();
|
||||
HttpRequest->SetURL(*(Url + Request.ComputePath()));
|
||||
|
||||
for(const auto& It : AdditionalHeaderParams)
|
||||
@@ -147,15 +113,26 @@ bool OpenAPIStoreApi::DeleteOrder(const DeleteOrderRequest& Request, const FDele
|
||||
|
||||
Request.SetupHttpRequest(HttpRequest);
|
||||
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnDeleteOrderResponse, Delegate);
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnDeleteOrderResponse, Delegate, Request.GetAutoRetryCount());
|
||||
return HttpRequest->ProcessRequest();
|
||||
}
|
||||
|
||||
void OpenAPIStoreApi::OnDeleteOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeleteOrderDelegate Delegate) const
|
||||
void OpenAPIStoreApi::OnDeleteOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeleteOrderDelegate Delegate, int AutoRetryCount) const
|
||||
{
|
||||
DeleteOrderResponse Response;
|
||||
Response.SetHttpRequest(HttpRequest);
|
||||
|
||||
HandleResponse(HttpResponse, bSucceeded, Response);
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
|
||||
if(!Response.IsSuccessful() && AutoRetryCount > 0)
|
||||
{
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnDeleteOrderResponse, Delegate, AutoRetryCount - 1);
|
||||
Response.AsyncRetry();
|
||||
}
|
||||
else
|
||||
{
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
}
|
||||
}
|
||||
|
||||
bool OpenAPIStoreApi::GetInventory(const GetInventoryRequest& Request, const FGetInventoryDelegate& Delegate /*= FGetInventoryDelegate()*/) const
|
||||
@@ -163,7 +140,7 @@ bool OpenAPIStoreApi::GetInventory(const GetInventoryRequest& Request, const FGe
|
||||
if (!IsValid())
|
||||
return false;
|
||||
|
||||
FHttpRequestRef HttpRequest = CreateHttpRequest(Request);
|
||||
FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest();
|
||||
HttpRequest->SetURL(*(Url + Request.ComputePath()));
|
||||
|
||||
for(const auto& It : AdditionalHeaderParams)
|
||||
@@ -173,15 +150,26 @@ bool OpenAPIStoreApi::GetInventory(const GetInventoryRequest& Request, const FGe
|
||||
|
||||
Request.SetupHttpRequest(HttpRequest);
|
||||
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnGetInventoryResponse, Delegate);
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnGetInventoryResponse, Delegate, Request.GetAutoRetryCount());
|
||||
return HttpRequest->ProcessRequest();
|
||||
}
|
||||
|
||||
void OpenAPIStoreApi::OnGetInventoryResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetInventoryDelegate Delegate) const
|
||||
void OpenAPIStoreApi::OnGetInventoryResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetInventoryDelegate Delegate, int AutoRetryCount) const
|
||||
{
|
||||
GetInventoryResponse Response;
|
||||
Response.SetHttpRequest(HttpRequest);
|
||||
|
||||
HandleResponse(HttpResponse, bSucceeded, Response);
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
|
||||
if(!Response.IsSuccessful() && AutoRetryCount > 0)
|
||||
{
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnGetInventoryResponse, Delegate, AutoRetryCount - 1);
|
||||
Response.AsyncRetry();
|
||||
}
|
||||
else
|
||||
{
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
}
|
||||
}
|
||||
|
||||
bool OpenAPIStoreApi::GetOrderById(const GetOrderByIdRequest& Request, const FGetOrderByIdDelegate& Delegate /*= FGetOrderByIdDelegate()*/) const
|
||||
@@ -189,7 +177,7 @@ bool OpenAPIStoreApi::GetOrderById(const GetOrderByIdRequest& Request, const FGe
|
||||
if (!IsValid())
|
||||
return false;
|
||||
|
||||
FHttpRequestRef HttpRequest = CreateHttpRequest(Request);
|
||||
FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest();
|
||||
HttpRequest->SetURL(*(Url + Request.ComputePath()));
|
||||
|
||||
for(const auto& It : AdditionalHeaderParams)
|
||||
@@ -199,15 +187,26 @@ bool OpenAPIStoreApi::GetOrderById(const GetOrderByIdRequest& Request, const FGe
|
||||
|
||||
Request.SetupHttpRequest(HttpRequest);
|
||||
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnGetOrderByIdResponse, Delegate);
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnGetOrderByIdResponse, Delegate, Request.GetAutoRetryCount());
|
||||
return HttpRequest->ProcessRequest();
|
||||
}
|
||||
|
||||
void OpenAPIStoreApi::OnGetOrderByIdResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetOrderByIdDelegate Delegate) const
|
||||
void OpenAPIStoreApi::OnGetOrderByIdResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetOrderByIdDelegate Delegate, int AutoRetryCount) const
|
||||
{
|
||||
GetOrderByIdResponse Response;
|
||||
Response.SetHttpRequest(HttpRequest);
|
||||
|
||||
HandleResponse(HttpResponse, bSucceeded, Response);
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
|
||||
if(!Response.IsSuccessful() && AutoRetryCount > 0)
|
||||
{
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnGetOrderByIdResponse, Delegate, AutoRetryCount - 1);
|
||||
Response.AsyncRetry();
|
||||
}
|
||||
else
|
||||
{
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
}
|
||||
}
|
||||
|
||||
bool OpenAPIStoreApi::PlaceOrder(const PlaceOrderRequest& Request, const FPlaceOrderDelegate& Delegate /*= FPlaceOrderDelegate()*/) const
|
||||
@@ -215,7 +214,7 @@ bool OpenAPIStoreApi::PlaceOrder(const PlaceOrderRequest& Request, const FPlaceO
|
||||
if (!IsValid())
|
||||
return false;
|
||||
|
||||
FHttpRequestRef HttpRequest = CreateHttpRequest(Request);
|
||||
FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest();
|
||||
HttpRequest->SetURL(*(Url + Request.ComputePath()));
|
||||
|
||||
for(const auto& It : AdditionalHeaderParams)
|
||||
@@ -225,15 +224,26 @@ bool OpenAPIStoreApi::PlaceOrder(const PlaceOrderRequest& Request, const FPlaceO
|
||||
|
||||
Request.SetupHttpRequest(HttpRequest);
|
||||
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnPlaceOrderResponse, Delegate);
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnPlaceOrderResponse, Delegate, Request.GetAutoRetryCount());
|
||||
return HttpRequest->ProcessRequest();
|
||||
}
|
||||
|
||||
void OpenAPIStoreApi::OnPlaceOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FPlaceOrderDelegate Delegate) const
|
||||
void OpenAPIStoreApi::OnPlaceOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FPlaceOrderDelegate Delegate, int AutoRetryCount) const
|
||||
{
|
||||
PlaceOrderResponse Response;
|
||||
Response.SetHttpRequest(HttpRequest);
|
||||
|
||||
HandleResponse(HttpResponse, bSucceeded, Response);
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
|
||||
if(!Response.IsSuccessful() && AutoRetryCount > 0)
|
||||
{
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnPlaceOrderResponse, Delegate, AutoRetryCount - 1);
|
||||
Response.AsyncRetry();
|
||||
}
|
||||
else
|
||||
{
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -54,40 +54,6 @@ bool OpenAPIUserApi::IsValid() const
|
||||
return true;
|
||||
}
|
||||
|
||||
void OpenAPIUserApi::SetHttpRetryManager(FHttpRetrySystem::FManager& InRetryManager)
|
||||
{
|
||||
if(RetryManager != &GetHttpRetryManager())
|
||||
{
|
||||
DefaultRetryManager.Reset();
|
||||
RetryManager = &InRetryManager;
|
||||
}
|
||||
}
|
||||
|
||||
FHttpRetrySystem::FManager& OpenAPIUserApi::GetHttpRetryManager()
|
||||
{
|
||||
return *RetryManager;
|
||||
}
|
||||
|
||||
FHttpRequestRef OpenAPIUserApi::CreateHttpRequest(const Request& Request) const
|
||||
{
|
||||
if (!Request.GetRetryParams().IsSet())
|
||||
{
|
||||
return FHttpModule::Get().CreateRequest();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!RetryManager)
|
||||
{
|
||||
// Create default retry manager if none was specified
|
||||
DefaultRetryManager = MakeUnique<HttpRetryManager>(6, 60);
|
||||
RetryManager = DefaultRetryManager.Get();
|
||||
}
|
||||
|
||||
const HttpRetryParams& Params = Request.GetRetryParams().GetValue();
|
||||
return RetryManager->CreateRequest(Params.RetryLimitCountOverride, Params.RetryTimeoutRelativeSecondsOverride, Params.RetryResponseCodes, Params.RetryVerbs, Params.RetryDomains);
|
||||
}
|
||||
}
|
||||
|
||||
void OpenAPIUserApi::HandleResponse(FHttpResponsePtr HttpResponse, bool bSucceeded, Response& InOutResponse) const
|
||||
{
|
||||
InOutResponse.SetHttpResponse(HttpResponse);
|
||||
@@ -137,7 +103,7 @@ bool OpenAPIUserApi::CreateUser(const CreateUserRequest& Request, const FCreateU
|
||||
if (!IsValid())
|
||||
return false;
|
||||
|
||||
FHttpRequestRef HttpRequest = CreateHttpRequest(Request);
|
||||
FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest();
|
||||
HttpRequest->SetURL(*(Url + Request.ComputePath()));
|
||||
|
||||
for(const auto& It : AdditionalHeaderParams)
|
||||
@@ -147,15 +113,26 @@ bool OpenAPIUserApi::CreateUser(const CreateUserRequest& Request, const FCreateU
|
||||
|
||||
Request.SetupHttpRequest(HttpRequest);
|
||||
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUserResponse, Delegate);
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUserResponse, Delegate, Request.GetAutoRetryCount());
|
||||
return HttpRequest->ProcessRequest();
|
||||
}
|
||||
|
||||
void OpenAPIUserApi::OnCreateUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUserDelegate Delegate) const
|
||||
void OpenAPIUserApi::OnCreateUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUserDelegate Delegate, int AutoRetryCount) const
|
||||
{
|
||||
CreateUserResponse Response;
|
||||
Response.SetHttpRequest(HttpRequest);
|
||||
|
||||
HandleResponse(HttpResponse, bSucceeded, Response);
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
|
||||
if(!Response.IsSuccessful() && AutoRetryCount > 0)
|
||||
{
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUserResponse, Delegate, AutoRetryCount - 1);
|
||||
Response.AsyncRetry();
|
||||
}
|
||||
else
|
||||
{
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
}
|
||||
}
|
||||
|
||||
bool OpenAPIUserApi::CreateUsersWithArrayInput(const CreateUsersWithArrayInputRequest& Request, const FCreateUsersWithArrayInputDelegate& Delegate /*= FCreateUsersWithArrayInputDelegate()*/) const
|
||||
@@ -163,7 +140,7 @@ bool OpenAPIUserApi::CreateUsersWithArrayInput(const CreateUsersWithArrayInputRe
|
||||
if (!IsValid())
|
||||
return false;
|
||||
|
||||
FHttpRequestRef HttpRequest = CreateHttpRequest(Request);
|
||||
FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest();
|
||||
HttpRequest->SetURL(*(Url + Request.ComputePath()));
|
||||
|
||||
for(const auto& It : AdditionalHeaderParams)
|
||||
@@ -173,15 +150,26 @@ bool OpenAPIUserApi::CreateUsersWithArrayInput(const CreateUsersWithArrayInputRe
|
||||
|
||||
Request.SetupHttpRequest(HttpRequest);
|
||||
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUsersWithArrayInputResponse, Delegate);
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUsersWithArrayInputResponse, Delegate, Request.GetAutoRetryCount());
|
||||
return HttpRequest->ProcessRequest();
|
||||
}
|
||||
|
||||
void OpenAPIUserApi::OnCreateUsersWithArrayInputResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUsersWithArrayInputDelegate Delegate) const
|
||||
void OpenAPIUserApi::OnCreateUsersWithArrayInputResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUsersWithArrayInputDelegate Delegate, int AutoRetryCount) const
|
||||
{
|
||||
CreateUsersWithArrayInputResponse Response;
|
||||
Response.SetHttpRequest(HttpRequest);
|
||||
|
||||
HandleResponse(HttpResponse, bSucceeded, Response);
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
|
||||
if(!Response.IsSuccessful() && AutoRetryCount > 0)
|
||||
{
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUsersWithArrayInputResponse, Delegate, AutoRetryCount - 1);
|
||||
Response.AsyncRetry();
|
||||
}
|
||||
else
|
||||
{
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
}
|
||||
}
|
||||
|
||||
bool OpenAPIUserApi::CreateUsersWithListInput(const CreateUsersWithListInputRequest& Request, const FCreateUsersWithListInputDelegate& Delegate /*= FCreateUsersWithListInputDelegate()*/) const
|
||||
@@ -189,7 +177,7 @@ bool OpenAPIUserApi::CreateUsersWithListInput(const CreateUsersWithListInputRequ
|
||||
if (!IsValid())
|
||||
return false;
|
||||
|
||||
FHttpRequestRef HttpRequest = CreateHttpRequest(Request);
|
||||
FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest();
|
||||
HttpRequest->SetURL(*(Url + Request.ComputePath()));
|
||||
|
||||
for(const auto& It : AdditionalHeaderParams)
|
||||
@@ -199,15 +187,26 @@ bool OpenAPIUserApi::CreateUsersWithListInput(const CreateUsersWithListInputRequ
|
||||
|
||||
Request.SetupHttpRequest(HttpRequest);
|
||||
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUsersWithListInputResponse, Delegate);
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUsersWithListInputResponse, Delegate, Request.GetAutoRetryCount());
|
||||
return HttpRequest->ProcessRequest();
|
||||
}
|
||||
|
||||
void OpenAPIUserApi::OnCreateUsersWithListInputResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUsersWithListInputDelegate Delegate) const
|
||||
void OpenAPIUserApi::OnCreateUsersWithListInputResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUsersWithListInputDelegate Delegate, int AutoRetryCount) const
|
||||
{
|
||||
CreateUsersWithListInputResponse Response;
|
||||
Response.SetHttpRequest(HttpRequest);
|
||||
|
||||
HandleResponse(HttpResponse, bSucceeded, Response);
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
|
||||
if(!Response.IsSuccessful() && AutoRetryCount > 0)
|
||||
{
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUsersWithListInputResponse, Delegate, AutoRetryCount - 1);
|
||||
Response.AsyncRetry();
|
||||
}
|
||||
else
|
||||
{
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
}
|
||||
}
|
||||
|
||||
bool OpenAPIUserApi::DeleteUser(const DeleteUserRequest& Request, const FDeleteUserDelegate& Delegate /*= FDeleteUserDelegate()*/) const
|
||||
@@ -215,7 +214,7 @@ bool OpenAPIUserApi::DeleteUser(const DeleteUserRequest& Request, const FDeleteU
|
||||
if (!IsValid())
|
||||
return false;
|
||||
|
||||
FHttpRequestRef HttpRequest = CreateHttpRequest(Request);
|
||||
FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest();
|
||||
HttpRequest->SetURL(*(Url + Request.ComputePath()));
|
||||
|
||||
for(const auto& It : AdditionalHeaderParams)
|
||||
@@ -225,15 +224,26 @@ bool OpenAPIUserApi::DeleteUser(const DeleteUserRequest& Request, const FDeleteU
|
||||
|
||||
Request.SetupHttpRequest(HttpRequest);
|
||||
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnDeleteUserResponse, Delegate);
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnDeleteUserResponse, Delegate, Request.GetAutoRetryCount());
|
||||
return HttpRequest->ProcessRequest();
|
||||
}
|
||||
|
||||
void OpenAPIUserApi::OnDeleteUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeleteUserDelegate Delegate) const
|
||||
void OpenAPIUserApi::OnDeleteUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeleteUserDelegate Delegate, int AutoRetryCount) const
|
||||
{
|
||||
DeleteUserResponse Response;
|
||||
Response.SetHttpRequest(HttpRequest);
|
||||
|
||||
HandleResponse(HttpResponse, bSucceeded, Response);
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
|
||||
if(!Response.IsSuccessful() && AutoRetryCount > 0)
|
||||
{
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnDeleteUserResponse, Delegate, AutoRetryCount - 1);
|
||||
Response.AsyncRetry();
|
||||
}
|
||||
else
|
||||
{
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
}
|
||||
}
|
||||
|
||||
bool OpenAPIUserApi::GetUserByName(const GetUserByNameRequest& Request, const FGetUserByNameDelegate& Delegate /*= FGetUserByNameDelegate()*/) const
|
||||
@@ -241,7 +251,7 @@ bool OpenAPIUserApi::GetUserByName(const GetUserByNameRequest& Request, const FG
|
||||
if (!IsValid())
|
||||
return false;
|
||||
|
||||
FHttpRequestRef HttpRequest = CreateHttpRequest(Request);
|
||||
FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest();
|
||||
HttpRequest->SetURL(*(Url + Request.ComputePath()));
|
||||
|
||||
for(const auto& It : AdditionalHeaderParams)
|
||||
@@ -251,15 +261,26 @@ bool OpenAPIUserApi::GetUserByName(const GetUserByNameRequest& Request, const FG
|
||||
|
||||
Request.SetupHttpRequest(HttpRequest);
|
||||
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnGetUserByNameResponse, Delegate);
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnGetUserByNameResponse, Delegate, Request.GetAutoRetryCount());
|
||||
return HttpRequest->ProcessRequest();
|
||||
}
|
||||
|
||||
void OpenAPIUserApi::OnGetUserByNameResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetUserByNameDelegate Delegate) const
|
||||
void OpenAPIUserApi::OnGetUserByNameResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetUserByNameDelegate Delegate, int AutoRetryCount) const
|
||||
{
|
||||
GetUserByNameResponse Response;
|
||||
Response.SetHttpRequest(HttpRequest);
|
||||
|
||||
HandleResponse(HttpResponse, bSucceeded, Response);
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
|
||||
if(!Response.IsSuccessful() && AutoRetryCount > 0)
|
||||
{
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnGetUserByNameResponse, Delegate, AutoRetryCount - 1);
|
||||
Response.AsyncRetry();
|
||||
}
|
||||
else
|
||||
{
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
}
|
||||
}
|
||||
|
||||
bool OpenAPIUserApi::LoginUser(const LoginUserRequest& Request, const FLoginUserDelegate& Delegate /*= FLoginUserDelegate()*/) const
|
||||
@@ -267,7 +288,7 @@ bool OpenAPIUserApi::LoginUser(const LoginUserRequest& Request, const FLoginUser
|
||||
if (!IsValid())
|
||||
return false;
|
||||
|
||||
FHttpRequestRef HttpRequest = CreateHttpRequest(Request);
|
||||
FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest();
|
||||
HttpRequest->SetURL(*(Url + Request.ComputePath()));
|
||||
|
||||
for(const auto& It : AdditionalHeaderParams)
|
||||
@@ -277,15 +298,26 @@ bool OpenAPIUserApi::LoginUser(const LoginUserRequest& Request, const FLoginUser
|
||||
|
||||
Request.SetupHttpRequest(HttpRequest);
|
||||
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnLoginUserResponse, Delegate);
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnLoginUserResponse, Delegate, Request.GetAutoRetryCount());
|
||||
return HttpRequest->ProcessRequest();
|
||||
}
|
||||
|
||||
void OpenAPIUserApi::OnLoginUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FLoginUserDelegate Delegate) const
|
||||
void OpenAPIUserApi::OnLoginUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FLoginUserDelegate Delegate, int AutoRetryCount) const
|
||||
{
|
||||
LoginUserResponse Response;
|
||||
Response.SetHttpRequest(HttpRequest);
|
||||
|
||||
HandleResponse(HttpResponse, bSucceeded, Response);
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
|
||||
if(!Response.IsSuccessful() && AutoRetryCount > 0)
|
||||
{
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnLoginUserResponse, Delegate, AutoRetryCount - 1);
|
||||
Response.AsyncRetry();
|
||||
}
|
||||
else
|
||||
{
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
}
|
||||
}
|
||||
|
||||
bool OpenAPIUserApi::LogoutUser(const LogoutUserRequest& Request, const FLogoutUserDelegate& Delegate /*= FLogoutUserDelegate()*/) const
|
||||
@@ -293,7 +325,7 @@ bool OpenAPIUserApi::LogoutUser(const LogoutUserRequest& Request, const FLogoutU
|
||||
if (!IsValid())
|
||||
return false;
|
||||
|
||||
FHttpRequestRef HttpRequest = CreateHttpRequest(Request);
|
||||
FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest();
|
||||
HttpRequest->SetURL(*(Url + Request.ComputePath()));
|
||||
|
||||
for(const auto& It : AdditionalHeaderParams)
|
||||
@@ -303,15 +335,26 @@ bool OpenAPIUserApi::LogoutUser(const LogoutUserRequest& Request, const FLogoutU
|
||||
|
||||
Request.SetupHttpRequest(HttpRequest);
|
||||
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnLogoutUserResponse, Delegate);
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnLogoutUserResponse, Delegate, Request.GetAutoRetryCount());
|
||||
return HttpRequest->ProcessRequest();
|
||||
}
|
||||
|
||||
void OpenAPIUserApi::OnLogoutUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FLogoutUserDelegate Delegate) const
|
||||
void OpenAPIUserApi::OnLogoutUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FLogoutUserDelegate Delegate, int AutoRetryCount) const
|
||||
{
|
||||
LogoutUserResponse Response;
|
||||
Response.SetHttpRequest(HttpRequest);
|
||||
|
||||
HandleResponse(HttpResponse, bSucceeded, Response);
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
|
||||
if(!Response.IsSuccessful() && AutoRetryCount > 0)
|
||||
{
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnLogoutUserResponse, Delegate, AutoRetryCount - 1);
|
||||
Response.AsyncRetry();
|
||||
}
|
||||
else
|
||||
{
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
}
|
||||
}
|
||||
|
||||
bool OpenAPIUserApi::UpdateUser(const UpdateUserRequest& Request, const FUpdateUserDelegate& Delegate /*= FUpdateUserDelegate()*/) const
|
||||
@@ -319,7 +362,7 @@ bool OpenAPIUserApi::UpdateUser(const UpdateUserRequest& Request, const FUpdateU
|
||||
if (!IsValid())
|
||||
return false;
|
||||
|
||||
FHttpRequestRef HttpRequest = CreateHttpRequest(Request);
|
||||
FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest();
|
||||
HttpRequest->SetURL(*(Url + Request.ComputePath()));
|
||||
|
||||
for(const auto& It : AdditionalHeaderParams)
|
||||
@@ -329,15 +372,26 @@ bool OpenAPIUserApi::UpdateUser(const UpdateUserRequest& Request, const FUpdateU
|
||||
|
||||
Request.SetupHttpRequest(HttpRequest);
|
||||
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnUpdateUserResponse, Delegate);
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnUpdateUserResponse, Delegate, Request.GetAutoRetryCount());
|
||||
return HttpRequest->ProcessRequest();
|
||||
}
|
||||
|
||||
void OpenAPIUserApi::OnUpdateUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdateUserDelegate Delegate) const
|
||||
void OpenAPIUserApi::OnUpdateUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdateUserDelegate Delegate, int AutoRetryCount) const
|
||||
{
|
||||
UpdateUserResponse Response;
|
||||
Response.SetHttpRequest(HttpRequest);
|
||||
|
||||
HandleResponse(HttpResponse, bSucceeded, Response);
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
|
||||
if(!Response.IsSuccessful() && AutoRetryCount > 0)
|
||||
{
|
||||
HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnUpdateUserResponse, Delegate, AutoRetryCount - 1);
|
||||
Response.AsyncRetry();
|
||||
}
|
||||
else
|
||||
{
|
||||
Delegate.ExecuteIfBound(Response);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -16,38 +16,11 @@
|
||||
#include "Interfaces/IHttpResponse.h"
|
||||
#include "Serialization/JsonWriter.h"
|
||||
#include "Dom/JsonObject.h"
|
||||
#include "HttpRetrySystem.h"
|
||||
#include "Containers/Ticker.h"
|
||||
|
||||
namespace OpenAPI
|
||||
{
|
||||
|
||||
typedef TSharedRef<TJsonWriter<>> JsonWriter;
|
||||
using namespace FHttpRetrySystem;
|
||||
|
||||
struct OPENAPI_API HttpRetryManager : public FManager, public FTickerObjectBase
|
||||
{
|
||||
using FManager::FManager;
|
||||
|
||||
bool Tick(float DeltaTime) final;
|
||||
};
|
||||
|
||||
struct OPENAPI_API HttpRetryParams
|
||||
{
|
||||
HttpRetryParams(
|
||||
const FRetryLimitCountSetting& InRetryLimitCountOverride = FRetryLimitCountSetting(),
|
||||
const FRetryTimeoutRelativeSecondsSetting& InRetryTimeoutRelativeSecondsOverride = FRetryTimeoutRelativeSecondsSetting(),
|
||||
const FRetryResponseCodes& InRetryResponseCodes = FRetryResponseCodes(),
|
||||
const FRetryVerbs& InRetryVerbs = FRetryVerbs(),
|
||||
const FRetryDomainsPtr& InRetryDomains = FRetryDomainsPtr()
|
||||
);
|
||||
|
||||
FRetryLimitCountSetting RetryLimitCountOverride;
|
||||
FRetryTimeoutRelativeSecondsSetting RetryTimeoutRelativeSecondsOverride;
|
||||
FRetryResponseCodes RetryResponseCodes;
|
||||
FRetryVerbs RetryVerbs;
|
||||
FRetryDomainsPtr RetryDomains;
|
||||
};
|
||||
|
||||
class OPENAPI_API Model
|
||||
{
|
||||
@@ -64,12 +37,11 @@ public:
|
||||
virtual void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const = 0;
|
||||
virtual FString ComputePath() const = 0;
|
||||
|
||||
/* Enables retry and optionally sets a retry policy for this request */
|
||||
void SetShouldRetry(const HttpRetryParams& Params = HttpRetryParams()) { RetryParams = Params; }
|
||||
const TOptional<HttpRetryParams>& GetRetryParams() const { return RetryParams; }
|
||||
void SetAutoRetryCount(int InCount) { AutoRetryCount = InCount; }
|
||||
int GetAutoRetryCount() const { return AutoRetryCount; }
|
||||
|
||||
private:
|
||||
TOptional<HttpRetryParams> RetryParams;
|
||||
int AutoRetryCount = 0;
|
||||
};
|
||||
|
||||
class OPENAPI_API Response
|
||||
@@ -81,6 +53,8 @@ public:
|
||||
void SetSuccessful(bool InSuccessful) { Successful = InSuccessful; }
|
||||
bool IsSuccessful() const { return Successful; }
|
||||
|
||||
void AsyncRetry() const;
|
||||
|
||||
virtual void SetHttpResponseCode(EHttpResponseCodes::Type InHttpResponseCode);
|
||||
EHttpResponseCodes::Type GetHttpResponseCode() const { return ResponseCode; }
|
||||
|
||||
@@ -90,11 +64,15 @@ public:
|
||||
void SetHttpResponse(const FHttpResponsePtr& InHttpResponse) { HttpResponse = InHttpResponse; }
|
||||
const FHttpResponsePtr& GetHttpResponse() const { return HttpResponse; }
|
||||
|
||||
void SetHttpRequest(const FHttpRequestPtr& InHttpRequest) { HttpRequest = InHttpRequest; }
|
||||
const FHttpRequestPtr& GetHttpRequest() const { return HttpRequest; }
|
||||
|
||||
private:
|
||||
bool Successful;
|
||||
EHttpResponseCodes::Type ResponseCode;
|
||||
FString ResponseString;
|
||||
FHttpResponsePtr HttpResponse;
|
||||
FHttpRequestPtr HttpRequest;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -24,19 +24,9 @@ public:
|
||||
OpenAPIPetApi();
|
||||
~OpenAPIPetApi();
|
||||
|
||||
/* Sets the URL Endpoint.
|
||||
* Note: several fallback endpoints can be configured in request retry policies, see Request::SetShouldRetry */
|
||||
void SetURL(const FString& Url);
|
||||
|
||||
/* Adds global header params to all requests */
|
||||
void AddHeaderParam(const FString& Key, const FString& Value);
|
||||
void ClearHeaderParams();
|
||||
|
||||
/* Sets the retry manager to the user-defined retry manager. User must manage the lifetime of the retry manager.
|
||||
* If no retry manager is specified and a request needs retries, a default retry manager will be used.
|
||||
* See also: Request::SetShouldRetry */
|
||||
void SetHttpRetryManager(FHttpRetrySystem::FManager& RetryManager);
|
||||
FHttpRetrySystem::FManager& GetHttpRetryManager();
|
||||
|
||||
class AddPetRequest;
|
||||
class AddPetResponse;
|
||||
@@ -73,24 +63,22 @@ public:
|
||||
bool UpdatePetWithForm(const UpdatePetWithFormRequest& Request, const FUpdatePetWithFormDelegate& Delegate = FUpdatePetWithFormDelegate()) const;
|
||||
bool UploadFile(const UploadFileRequest& Request, const FUploadFileDelegate& Delegate = FUploadFileDelegate()) const;
|
||||
|
||||
|
||||
private:
|
||||
void OnAddPetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FAddPetDelegate Delegate) const;
|
||||
void OnDeletePetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeletePetDelegate Delegate) const;
|
||||
void OnFindPetsByStatusResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FFindPetsByStatusDelegate Delegate) const;
|
||||
void OnFindPetsByTagsResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FFindPetsByTagsDelegate Delegate) const;
|
||||
void OnGetPetByIdResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetPetByIdDelegate Delegate) const;
|
||||
void OnUpdatePetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdatePetDelegate Delegate) const;
|
||||
void OnUpdatePetWithFormResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdatePetWithFormDelegate Delegate) const;
|
||||
void OnUploadFileResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUploadFileDelegate Delegate) const;
|
||||
void OnAddPetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FAddPetDelegate Delegate, int AutoRetryCount) const;
|
||||
void OnDeletePetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeletePetDelegate Delegate, int AutoRetryCount) const;
|
||||
void OnFindPetsByStatusResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FFindPetsByStatusDelegate Delegate, int AutoRetryCount) const;
|
||||
void OnFindPetsByTagsResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FFindPetsByTagsDelegate Delegate, int AutoRetryCount) const;
|
||||
void OnGetPetByIdResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetPetByIdDelegate Delegate, int AutoRetryCount) const;
|
||||
void OnUpdatePetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdatePetDelegate Delegate, int AutoRetryCount) const;
|
||||
void OnUpdatePetWithFormResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdatePetWithFormDelegate Delegate, int AutoRetryCount) const;
|
||||
void OnUploadFileResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUploadFileDelegate Delegate, int AutoRetryCount) const;
|
||||
|
||||
FHttpRequestRef CreateHttpRequest(const Request& Request) const;
|
||||
bool IsValid() const;
|
||||
void HandleResponse(FHttpResponsePtr HttpResponse, bool bSucceeded, Response& InOutResponse) const;
|
||||
|
||||
FString Url;
|
||||
TMap<FString,FString> AdditionalHeaderParams;
|
||||
mutable FHttpRetrySystem::FManager* RetryManager = nullptr;
|
||||
mutable TUniquePtr<HttpRetryManager> DefaultRetryManager;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -24,19 +24,9 @@ public:
|
||||
OpenAPIStoreApi();
|
||||
~OpenAPIStoreApi();
|
||||
|
||||
/* Sets the URL Endpoint.
|
||||
* Note: several fallback endpoints can be configured in request retry policies, see Request::SetShouldRetry */
|
||||
void SetURL(const FString& Url);
|
||||
|
||||
/* Adds global header params to all requests */
|
||||
void AddHeaderParam(const FString& Key, const FString& Value);
|
||||
void ClearHeaderParams();
|
||||
|
||||
/* Sets the retry manager to the user-defined retry manager. User must manage the lifetime of the retry manager.
|
||||
* If no retry manager is specified and a request needs retries, a default retry manager will be used.
|
||||
* See also: Request::SetShouldRetry */
|
||||
void SetHttpRetryManager(FHttpRetrySystem::FManager& RetryManager);
|
||||
FHttpRetrySystem::FManager& GetHttpRetryManager();
|
||||
|
||||
class DeleteOrderRequest;
|
||||
class DeleteOrderResponse;
|
||||
@@ -57,20 +47,18 @@ public:
|
||||
bool GetOrderById(const GetOrderByIdRequest& Request, const FGetOrderByIdDelegate& Delegate = FGetOrderByIdDelegate()) const;
|
||||
bool PlaceOrder(const PlaceOrderRequest& Request, const FPlaceOrderDelegate& Delegate = FPlaceOrderDelegate()) const;
|
||||
|
||||
|
||||
private:
|
||||
void OnDeleteOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeleteOrderDelegate Delegate) const;
|
||||
void OnGetInventoryResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetInventoryDelegate Delegate) const;
|
||||
void OnGetOrderByIdResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetOrderByIdDelegate Delegate) const;
|
||||
void OnPlaceOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FPlaceOrderDelegate Delegate) const;
|
||||
void OnDeleteOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeleteOrderDelegate Delegate, int AutoRetryCount) const;
|
||||
void OnGetInventoryResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetInventoryDelegate Delegate, int AutoRetryCount) const;
|
||||
void OnGetOrderByIdResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetOrderByIdDelegate Delegate, int AutoRetryCount) const;
|
||||
void OnPlaceOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FPlaceOrderDelegate Delegate, int AutoRetryCount) const;
|
||||
|
||||
FHttpRequestRef CreateHttpRequest(const Request& Request) const;
|
||||
bool IsValid() const;
|
||||
void HandleResponse(FHttpResponsePtr HttpResponse, bool bSucceeded, Response& InOutResponse) const;
|
||||
|
||||
FString Url;
|
||||
TMap<FString,FString> AdditionalHeaderParams;
|
||||
mutable FHttpRetrySystem::FManager* RetryManager = nullptr;
|
||||
mutable TUniquePtr<HttpRetryManager> DefaultRetryManager;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -24,19 +24,9 @@ public:
|
||||
OpenAPIUserApi();
|
||||
~OpenAPIUserApi();
|
||||
|
||||
/* Sets the URL Endpoint.
|
||||
* Note: several fallback endpoints can be configured in request retry policies, see Request::SetShouldRetry */
|
||||
void SetURL(const FString& Url);
|
||||
|
||||
/* Adds global header params to all requests */
|
||||
void AddHeaderParam(const FString& Key, const FString& Value);
|
||||
void ClearHeaderParams();
|
||||
|
||||
/* Sets the retry manager to the user-defined retry manager. User must manage the lifetime of the retry manager.
|
||||
* If no retry manager is specified and a request needs retries, a default retry manager will be used.
|
||||
* See also: Request::SetShouldRetry */
|
||||
void SetHttpRetryManager(FHttpRetrySystem::FManager& RetryManager);
|
||||
FHttpRetrySystem::FManager& GetHttpRetryManager();
|
||||
|
||||
class CreateUserRequest;
|
||||
class CreateUserResponse;
|
||||
@@ -73,24 +63,22 @@ public:
|
||||
bool LogoutUser(const LogoutUserRequest& Request, const FLogoutUserDelegate& Delegate = FLogoutUserDelegate()) const;
|
||||
bool UpdateUser(const UpdateUserRequest& Request, const FUpdateUserDelegate& Delegate = FUpdateUserDelegate()) const;
|
||||
|
||||
|
||||
private:
|
||||
void OnCreateUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUserDelegate Delegate) const;
|
||||
void OnCreateUsersWithArrayInputResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUsersWithArrayInputDelegate Delegate) const;
|
||||
void OnCreateUsersWithListInputResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUsersWithListInputDelegate Delegate) const;
|
||||
void OnDeleteUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeleteUserDelegate Delegate) const;
|
||||
void OnGetUserByNameResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetUserByNameDelegate Delegate) const;
|
||||
void OnLoginUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FLoginUserDelegate Delegate) const;
|
||||
void OnLogoutUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FLogoutUserDelegate Delegate) const;
|
||||
void OnUpdateUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdateUserDelegate Delegate) const;
|
||||
void OnCreateUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUserDelegate Delegate, int AutoRetryCount) const;
|
||||
void OnCreateUsersWithArrayInputResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUsersWithArrayInputDelegate Delegate, int AutoRetryCount) const;
|
||||
void OnCreateUsersWithListInputResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUsersWithListInputDelegate Delegate, int AutoRetryCount) const;
|
||||
void OnDeleteUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeleteUserDelegate Delegate, int AutoRetryCount) const;
|
||||
void OnGetUserByNameResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetUserByNameDelegate Delegate, int AutoRetryCount) const;
|
||||
void OnLoginUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FLoginUserDelegate Delegate, int AutoRetryCount) const;
|
||||
void OnLogoutUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FLogoutUserDelegate Delegate, int AutoRetryCount) const;
|
||||
void OnUpdateUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdateUserDelegate Delegate, int AutoRetryCount) const;
|
||||
|
||||
FHttpRequestRef CreateHttpRequest(const Request& Request) const;
|
||||
bool IsValid() const;
|
||||
void HandleResponse(FHttpResponsePtr HttpResponse, bool bSucceeded, Response& InOutResponse) const;
|
||||
|
||||
FString Url;
|
||||
TMap<FString,FString> AdditionalHeaderParams;
|
||||
mutable FHttpRetrySystem::FManager* RetryManager = nullptr;
|
||||
mutable TUniquePtr<HttpRetryManager> DefaultRetryManager;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
5.1.1
|
||||
5.1.1-SNAPSHOT
|
||||
@@ -5,7 +5,7 @@
|
||||
#The version of the OpenAPI document: 1.0.0
|
||||
#
|
||||
#Generated by: https://openapi-generator.tech
|
||||
#OpenAPI Generator version: 5.1.1
|
||||
#OpenAPI Generator version: 5.1.1-SNAPSHOT
|
||||
#
|
||||
|
||||
language: crystal
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#The version of the OpenAPI document: 1.0.0
|
||||
#
|
||||
#Generated by: https://openapi-generator.tech
|
||||
#OpenAPI Generator version: 5.1.1
|
||||
#OpenAPI Generator version: 5.1.1-SNAPSHOT
|
||||
#
|
||||
|
||||
# load modules
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#The version of the OpenAPI document: 1.0.0
|
||||
#
|
||||
#Generated by: https://openapi-generator.tech
|
||||
#OpenAPI Generator version: 5.1.1
|
||||
#OpenAPI Generator version: 5.1.1-SNAPSHOT
|
||||
#
|
||||
|
||||
# Dependencies
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#The version of the OpenAPI document: 1.0.0
|
||||
#
|
||||
#Generated by: https://openapi-generator.tech
|
||||
#OpenAPI Generator version: 5.1.1
|
||||
#OpenAPI Generator version: 5.1.1-SNAPSHOT
|
||||
#
|
||||
|
||||
require "uri"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#The version of the OpenAPI document: 1.0.0
|
||||
#
|
||||
#Generated by: https://openapi-generator.tech
|
||||
#OpenAPI Generator version: 5.1.1
|
||||
#OpenAPI Generator version: 5.1.1-SNAPSHOT
|
||||
#
|
||||
|
||||
require "uri"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#The version of the OpenAPI document: 1.0.0
|
||||
#
|
||||
#Generated by: https://openapi-generator.tech
|
||||
#OpenAPI Generator version: 5.1.1
|
||||
#OpenAPI Generator version: 5.1.1-SNAPSHOT
|
||||
#
|
||||
|
||||
require "uri"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#The version of the OpenAPI document: 1.0.0
|
||||
#
|
||||
#Generated by: https://openapi-generator.tech
|
||||
#OpenAPI Generator version: 5.1.1
|
||||
#OpenAPI Generator version: 5.1.1-SNAPSHOT
|
||||
#
|
||||
|
||||
require "json"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#The version of the OpenAPI document: 1.0.0
|
||||
#
|
||||
#Generated by: https://openapi-generator.tech
|
||||
#OpenAPI Generator version: 5.1.1
|
||||
#OpenAPI Generator version: 5.1.1-SNAPSHOT
|
||||
#
|
||||
|
||||
module Petstore
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#The version of the OpenAPI document: 1.0.0
|
||||
#
|
||||
#Generated by: https://openapi-generator.tech
|
||||
#OpenAPI Generator version: 5.1.1
|
||||
#OpenAPI Generator version: 5.1.1-SNAPSHOT
|
||||
#
|
||||
|
||||
require "log"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#The version of the OpenAPI document: 1.0.0
|
||||
#
|
||||
#Generated by: https://openapi-generator.tech
|
||||
#OpenAPI Generator version: 5.1.1
|
||||
#OpenAPI Generator version: 5.1.1-SNAPSHOT
|
||||
#
|
||||
|
||||
require "time"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#The version of the OpenAPI document: 1.0.0
|
||||
#
|
||||
#Generated by: https://openapi-generator.tech
|
||||
#OpenAPI Generator version: 5.1.1
|
||||
#OpenAPI Generator version: 5.1.1-SNAPSHOT
|
||||
#
|
||||
|
||||
require "time"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#The version of the OpenAPI document: 1.0.0
|
||||
#
|
||||
#Generated by: https://openapi-generator.tech
|
||||
#OpenAPI Generator version: 5.1.1
|
||||
#OpenAPI Generator version: 5.1.1-SNAPSHOT
|
||||
#
|
||||
|
||||
require "time"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#The version of the OpenAPI document: 1.0.0
|
||||
#
|
||||
#Generated by: https://openapi-generator.tech
|
||||
#OpenAPI Generator version: 5.1.1
|
||||
#OpenAPI Generator version: 5.1.1-SNAPSHOT
|
||||
#
|
||||
|
||||
require "time"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#The version of the OpenAPI document: 1.0.0
|
||||
#
|
||||
#Generated by: https://openapi-generator.tech
|
||||
#OpenAPI Generator version: 5.1.1
|
||||
#OpenAPI Generator version: 5.1.1-SNAPSHOT
|
||||
#
|
||||
|
||||
require "time"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#The version of the OpenAPI document: 1.0.0
|
||||
#
|
||||
#Generated by: https://openapi-generator.tech
|
||||
#OpenAPI Generator version: 5.1.1
|
||||
#OpenAPI Generator version: 5.1.1-SNAPSHOT
|
||||
#
|
||||
|
||||
require "time"
|
||||
|
||||
@@ -1 +1 @@
|
||||
5.1.1
|
||||
5.1.1-SNAPSHOT
|
||||
@@ -36,7 +36,6 @@ namespace Org.OpenAPITools.Test
|
||||
private PetApi instance;
|
||||
|
||||
private long petId = 11088;
|
||||
private long notExsistentPetId = 99999;
|
||||
|
||||
/// <summary>
|
||||
/// Create a Pet object
|
||||
@@ -205,25 +204,6 @@ namespace Org.OpenAPITools.Test
|
||||
Assert.Equal("sample category name2", response.Category.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test GetPetById on an not existent Id
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void TestGetPetById_TestException()
|
||||
{
|
||||
PetApi petApi = new PetApi();
|
||||
|
||||
var exception = Assert.Throws<ApiException>(() =>
|
||||
{
|
||||
petApi.GetPetById(notExsistentPetId);
|
||||
});
|
||||
|
||||
Assert.IsType<ApiException>(exception);
|
||||
Assert.Equal(404, exception.ErrorCode);
|
||||
Assert.Equal("{\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", exception.ErrorContent);
|
||||
Assert.Equal("Error calling GetPetById: {\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", exception.Message);
|
||||
}
|
||||
|
||||
/* a simple test for binary response. no longer in use.
|
||||
[Fact]
|
||||
public void TestGetByIdBinaryResponse()
|
||||
@@ -267,25 +247,7 @@ namespace Org.OpenAPITools.Test
|
||||
Assert.Equal(56, response.Category.Id);
|
||||
Assert.Equal("sample category name2", response.Category.Name);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestGetPetByIdWithHttpInfoAsync_Test404Response()
|
||||
{
|
||||
PetApi petApi = new PetApi();
|
||||
petApi.ExceptionFactory = null;
|
||||
var response = petApi.GetPetByIdWithHttpInfoAsync(notExsistentPetId).Result;
|
||||
Pet result = response.Data;
|
||||
|
||||
Assert.IsType<ApiResponse<Pet>>(response);
|
||||
Assert.Equal(404, (int)response.StatusCode);
|
||||
Assert.True(response.Headers.ContainsKey("Content-Type"));
|
||||
Assert.Equal("application/json", response.Headers["Content-Type"][0]);
|
||||
|
||||
Assert.Null(result);
|
||||
Assert.Equal("{\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", response.RawContent);
|
||||
Assert.Equal("Not Found", response.ErrorText);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Test UpdatePet
|
||||
/// </summary>
|
||||
|
||||
@@ -1,579 +0,0 @@
|
||||
/*
|
||||
* OpenAPI Petstore
|
||||
*
|
||||
* This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
|
||||
*
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*
|
||||
* Generated by: https://github.com/openapitools/openapi-generator.git
|
||||
*/
|
||||
using Org.OpenAPITools.Api;
|
||||
using Org.OpenAPITools.Client;
|
||||
using Org.OpenAPITools.Model;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Net.Http;
|
||||
using System.Reflection;
|
||||
using System.Threading.Tasks;
|
||||
using Xunit;
|
||||
|
||||
namespace Org.OpenAPITools.Test.Api
|
||||
{
|
||||
/// <summary>
|
||||
/// Class for testing PetApi
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||
/// Please update the test case below to test the API endpoint.
|
||||
/// </remarks>
|
||||
public class PetApiTestsV2 : IDisposable
|
||||
{
|
||||
// CONFIGURE TESTING PARAMETERS HERE
|
||||
// see the Integration Test Wiki for details: https://github.com/OpenAPITools/openapi-generator/wiki/Integration-Tests
|
||||
private const string BasePath = "http://petstore.swagger.io/v2";
|
||||
private const long PetId = 100000;
|
||||
private const long NotExistentId = 100001;
|
||||
|
||||
private readonly HttpClient _httpClient = new HttpClient();
|
||||
private readonly PetApi _petApi;
|
||||
|
||||
public PetApiTestsV2()
|
||||
{
|
||||
// prepare the client
|
||||
_petApi = new PetApi(_httpClient, new Configuration
|
||||
{
|
||||
BasePath = BasePath,
|
||||
Timeout = 10000,
|
||||
UserAgent = "TEST_USER_AGENT"
|
||||
});
|
||||
|
||||
// add a sample pet for the expected PetId
|
||||
_petApi.AddPet(BuildSamplePet());
|
||||
|
||||
// ensure there is not a pet for that ID
|
||||
try
|
||||
{
|
||||
_petApi.DeletePet(NotExistentId);
|
||||
}
|
||||
catch (ApiException ex) when (ex.ErrorCode == 404) { }
|
||||
}
|
||||
|
||||
#region Get
|
||||
|
||||
/// <summary>
|
||||
/// Test GetPetById with an existent Id
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void GetPetById_GivenExistentId_ReturnsPet()
|
||||
{
|
||||
Pet expected = BuildSamplePet();
|
||||
|
||||
Pet response = _petApi.GetPetById(PetId);
|
||||
|
||||
Assert.IsType<Pet>(response);
|
||||
Assert.Equal(expected.Name, response.Name);
|
||||
Assert.Equal(expected.Status, response.Status);
|
||||
Assert.IsType<List<Tag>>(response.Tags);
|
||||
Assert.Equal(expected.Tags[0].Id, response.Tags[0].Id);
|
||||
Assert.Equal(expected.Tags[0].Name, response.Tags[0].Name);
|
||||
Assert.IsType<List<string>>(response.PhotoUrls);
|
||||
Assert.Equal(expected.PhotoUrls[0], response.PhotoUrls[0]);
|
||||
Assert.IsType<Category>(response.Category);
|
||||
Assert.Equal(expected.Category.Id, response.Category.Id);
|
||||
Assert.Equal(expected.Category.Name, response.Category.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test GetPetById with a not existent Id
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void GetPetById_GivenNotExistentId_ThrowsApiException()
|
||||
{
|
||||
var exception = Assert.Throws<ApiException>(() =>
|
||||
{
|
||||
_petApi.GetPetById(NotExistentId);
|
||||
});
|
||||
|
||||
Assert.IsType<ApiException>(exception);
|
||||
Assert.Equal(404, exception.ErrorCode);
|
||||
Assert.Equal("{\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", exception.ErrorContent);
|
||||
Assert.Equal("Error calling GetPetById: {\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", exception.Message);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test GetPetByIdWithHttpInfo with an existent Id
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void GetPetByIdWithHttpInfo_GivenExistentId_Returns200Response()
|
||||
{
|
||||
Pet expected = BuildSamplePet();
|
||||
|
||||
ApiResponse<Pet> response = _petApi.GetPetByIdWithHttpInfo(PetId);
|
||||
Pet result = response.Data;
|
||||
|
||||
Assert.IsType<ApiResponse<Pet>>(response);
|
||||
Assert.Equal(200, (int)response.StatusCode);
|
||||
Assert.True(response.Headers.ContainsKey("Content-Type"));
|
||||
Assert.Equal("application/json", response.Headers["Content-Type"][0]);
|
||||
|
||||
Assert.Equal(expected.Name, result.Name);
|
||||
Assert.Equal(expected.Status, result.Status);
|
||||
Assert.IsType<List<Tag>>(result.Tags);
|
||||
Assert.Equal(expected.Tags[0].Id, result.Tags[0].Id);
|
||||
Assert.Equal(expected.Tags[0].Name, result.Tags[0].Name);
|
||||
Assert.IsType<List<string>>(result.PhotoUrls);
|
||||
Assert.Equal(expected.PhotoUrls[0], result.PhotoUrls[0]);
|
||||
Assert.IsType<Category>(result.Category);
|
||||
Assert.Equal(expected.Category.Id, result.Category.Id);
|
||||
Assert.Equal(expected.Category.Name, result.Category.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test GetPetByIdWithHttpInfo with a not existent Id and the ExceptionFactory disabled
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void GetPetByIdWithHttpInfo_GivenNotExistentId_ThrowsApiException()
|
||||
{
|
||||
var exception = Assert.Throws<ApiException>(() =>
|
||||
{
|
||||
_petApi.GetPetByIdWithHttpInfo(NotExistentId);
|
||||
});
|
||||
|
||||
Assert.IsType<ApiException>(exception);
|
||||
Assert.Equal(404, exception.ErrorCode);
|
||||
Assert.Equal("{\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", exception.ErrorContent);
|
||||
Assert.Equal("Error calling GetPetById: {\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", exception.Message);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test GetPetByIdWithHttpInfo with a not existent Id and the ExceptionFactory disabled
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void GetPetByIdWithHttpInfo_WithoutExceptionFactory_GivenNotExistentId_Returns404Response()
|
||||
{
|
||||
_petApi.ExceptionFactory = null;
|
||||
ApiResponse<Pet> response = _petApi.GetPetByIdWithHttpInfo(NotExistentId);
|
||||
Pet result = response.Data;
|
||||
|
||||
Assert.IsType<ApiResponse<Pet>>(response);
|
||||
Assert.Equal(404, (int)response.StatusCode);
|
||||
Assert.True(response.Headers.ContainsKey("Content-Type"));
|
||||
Assert.Equal("application/json", response.Headers["Content-Type"][0]);
|
||||
|
||||
Assert.Null(result);
|
||||
Assert.Equal("{\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", response.RawContent);
|
||||
Assert.Equal("Not Found", response.ErrorText);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Get Async
|
||||
|
||||
/// <summary>
|
||||
/// Test GetPetByIdAsync with an existent Id.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async Task GetPetByIdAsync_GivenExistentId_ReturnsPet()
|
||||
{
|
||||
Pet expected = BuildSamplePet();
|
||||
|
||||
Pet response = await _petApi.GetPetByIdAsync(PetId);
|
||||
|
||||
Assert.IsType<Pet>(response);
|
||||
Assert.Equal(expected.Name, response.Name);
|
||||
Assert.Equal(expected.Status, response.Status);
|
||||
Assert.IsType<List<Tag>>(response.Tags);
|
||||
Assert.Equal(expected.Tags[0].Id, response.Tags[0].Id);
|
||||
Assert.Equal(expected.Tags[0].Name, response.Tags[0].Name);
|
||||
Assert.IsType<List<string>>(response.PhotoUrls);
|
||||
Assert.Equal(expected.PhotoUrls[0], response.PhotoUrls[0]);
|
||||
Assert.IsType<Category>(response.Category);
|
||||
Assert.Equal(expected.Category.Id, response.Category.Id);
|
||||
Assert.Equal(expected.Category.Name, response.Category.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test GetPetByIdAsync with a not existent Id.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async Task GetPetByIdAsync_GivenNotExistentId_ThrowsApiException()
|
||||
{
|
||||
var exception = await Assert.ThrowsAsync<ApiException>(() => _petApi.GetPetByIdAsync(NotExistentId));
|
||||
|
||||
Assert.IsType<ApiException>(exception);
|
||||
Assert.Equal(404, exception.ErrorCode);
|
||||
Assert.Equal("{\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", exception.ErrorContent);
|
||||
Assert.Equal("Error calling GetPetById: {\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", exception.Message);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test GetPetByIdWithHttpInfoAsync with an existent Id.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async Task GetPetByIdWithHttpInfoAsync_GivenExistentId_Returns200Response()
|
||||
{
|
||||
Pet expected = BuildSamplePet();
|
||||
|
||||
ApiResponse<Pet> response = await _petApi.GetPetByIdWithHttpInfoAsync(PetId);
|
||||
Pet result = response.Data;
|
||||
|
||||
Assert.IsType<ApiResponse<Pet>>(response);
|
||||
Assert.Equal(200, (int)response.StatusCode);
|
||||
Assert.True(response.Headers.ContainsKey("Content-Type"));
|
||||
Assert.Equal("application/json", response.Headers["Content-Type"][0]);
|
||||
|
||||
Assert.Equal(expected.Name, result.Name);
|
||||
Assert.Equal(expected.Status, result.Status);
|
||||
Assert.IsType<List<Tag>>(result.Tags);
|
||||
Assert.Equal(expected.Tags[0].Id, result.Tags[0].Id);
|
||||
Assert.Equal(expected.Tags[0].Name, result.Tags[0].Name);
|
||||
Assert.IsType<List<string>>(result.PhotoUrls);
|
||||
Assert.Equal(expected.PhotoUrls[0], result.PhotoUrls[0]);
|
||||
Assert.IsType<Category>(result.Category);
|
||||
Assert.Equal(expected.Category.Id, result.Category.Id);
|
||||
Assert.Equal(expected.Category.Name, result.Category.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test GetPetByIdWithHttpInfoAsync with a not existent Id and the ExceptionFactory disabled.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async Task GetPetByIdWithHttpInfoAsync_GivenNotExistentId_ThrowsApiException()
|
||||
{
|
||||
var exception = await Assert.ThrowsAsync<ApiException>(() => _petApi.GetPetByIdWithHttpInfoAsync(NotExistentId));
|
||||
|
||||
Assert.IsType<ApiException>(exception);
|
||||
Assert.Equal(404, exception.ErrorCode);
|
||||
Assert.Equal("{\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", exception.ErrorContent);
|
||||
Assert.Equal("Error calling GetPetById: {\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", exception.Message);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test GetPetByIdWithHttpInfoAsync with a not existent Id and the ExceptionFactory disabled.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async Task GetPetByIdWithHttpInfoAsync_WithoutExceptionFactory_GivenNotExistentId_Returns404Response()
|
||||
{
|
||||
_petApi.ExceptionFactory = null;
|
||||
ApiResponse<Pet> response = await _petApi.GetPetByIdWithHttpInfoAsync(NotExistentId);
|
||||
Pet result = response.Data;
|
||||
|
||||
Assert.IsType<ApiResponse<Pet>>(response);
|
||||
Assert.Equal(404, (int)response.StatusCode);
|
||||
Assert.True(response.Headers.ContainsKey("Content-Type"));
|
||||
Assert.Equal("application/json", response.Headers["Content-Type"][0]);
|
||||
|
||||
Assert.Null(result);
|
||||
Assert.Equal("{\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", response.RawContent);
|
||||
Assert.Equal("Not Found", response.ErrorText);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Find
|
||||
|
||||
/// <summary>
|
||||
/// Test FindPetsByStatus filtering available pets.
|
||||
/// </summary>
|
||||
[Fact(Skip = "too much elements to fetch, the server cut the json content")]
|
||||
public void FindPetsByStatus_ReturnsListOfPetsFiltered()
|
||||
{
|
||||
List<Pet> pets = _petApi.FindPetsByStatus(new List<string>(new[] { "available" }));
|
||||
|
||||
foreach (Pet pet in pets)
|
||||
{
|
||||
Assert.IsType<Pet>(pet);
|
||||
Assert.Equal(Pet.StatusEnum.Available, pet.Status);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Add
|
||||
|
||||
/// <summary>
|
||||
/// Test AddPet with an existent Id. The current server beavior is to update the Pet.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void AddPet_GivenExistentId_UpdateThePet()
|
||||
{
|
||||
Pet pet = BuildSamplePet();
|
||||
|
||||
_petApi.AddPet(pet);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region AddAsync
|
||||
|
||||
/// <summary>
|
||||
/// Test AddPetAsync with an existent Id. The current server beavior is to update the Pet.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async Task AddPetAsync_GivenExistentId_UpdateThePet()
|
||||
{
|
||||
Pet pet = BuildSamplePet();
|
||||
|
||||
await _petApi.AddPetAsync(pet);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Update
|
||||
|
||||
/// <summary>
|
||||
/// Test UpdatePet with an existent Id.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void UpdatePet_GivenExistentId_UpdateThePet()
|
||||
{
|
||||
Pet pet = BuildSamplePet();
|
||||
|
||||
_petApi.UpdatePet(pet);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test UpdatePet with a not existent Id. The current server beavior is to create the Pet.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void UpdatePet_GivenNotExistentId_UpdateThePet()
|
||||
{
|
||||
Pet pet = BuildSamplePet(i => i.Id = NotExistentId);
|
||||
|
||||
_petApi.UpdatePet(pet);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test UpdatePetWithForm with an existent Id.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void UpdatePetWithForm_GivenExistentId_UpdatesTheFields()
|
||||
{
|
||||
Pet expected = BuildSamplePet(pet =>
|
||||
{
|
||||
pet.Name = "name updated";
|
||||
pet.Status = Pet.StatusEnum.Pending;
|
||||
});
|
||||
|
||||
_petApi.UpdatePetWithForm(PetId, "name updated", "pending");
|
||||
|
||||
Pet response = _petApi.GetPetById(PetId);
|
||||
|
||||
Assert.IsType<Pet>(response);
|
||||
Assert.Equal(expected.Name, response.Name);
|
||||
Assert.Equal(expected.Status, response.Status);
|
||||
Assert.IsType<List<Tag>>(response.Tags);
|
||||
Assert.Equal(expected.Tags[0].Id, response.Tags[0].Id);
|
||||
Assert.Equal(expected.Tags[0].Name, response.Tags[0].Name);
|
||||
Assert.IsType<List<string>>(response.PhotoUrls);
|
||||
Assert.Equal(expected.PhotoUrls[0], response.PhotoUrls[0]);
|
||||
Assert.IsType<Category>(response.Category);
|
||||
Assert.Equal(expected.Category.Id, response.Category.Id);
|
||||
Assert.Equal(expected.Category.Name, response.Category.Name);
|
||||
|
||||
_petApi.UpdatePetWithForm(PetId, "name updated twice");
|
||||
|
||||
response = _petApi.GetPetById(PetId);
|
||||
|
||||
Assert.Equal("name updated twice", response.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test UploadFile with an existent Id.
|
||||
/// </summary>
|
||||
[Fact(Skip = "generates 500 code at the time of test")]
|
||||
public void UploadFile_UploadFileUsingFormParameters_UpdatesTheFields()
|
||||
{
|
||||
var assembly = Assembly.GetExecutingAssembly();
|
||||
using Stream imageStream = assembly.GetManifestResourceStream("Org.OpenAPITools.Test.linux-logo.png");
|
||||
_petApi.UploadFile(PetId, "metadata sample", imageStream);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test UploadFile with an existent Id.
|
||||
/// </summary>
|
||||
[Fact(Skip = "generates 500 code at the time of test")]
|
||||
public void UploadFile_UploadFileAlone_UpdatesTheField()
|
||||
{
|
||||
var assembly = Assembly.GetExecutingAssembly();
|
||||
using Stream imageStream = assembly.GetManifestResourceStream("Org.OpenAPITools.Test.linux-logo.png");
|
||||
_petApi.UploadFile(petId: PetId, file: imageStream);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region UpdateAsync
|
||||
|
||||
/// <summary>
|
||||
/// Test UpdatePetAsync with an existent Id.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async Task UpdatePetAsync_GivenExistentId_UpdateThePet()
|
||||
{
|
||||
Pet pet = BuildSamplePet();
|
||||
|
||||
await _petApi.UpdatePetAsync(pet);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test UpdatePetAsync with a not existent Id. The current server beavior is to create the Pet.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async Task UpdatePetAsync_GivenNotExistentId_UpdateThePet()
|
||||
{
|
||||
Pet pet = BuildSamplePet(i => i.Id = NotExistentId);
|
||||
|
||||
await _petApi.UpdatePetAsync(pet);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test UpdatePetWithFormAsync with an existent Id.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async Task UpdatePetWithFormAsync_GivenExistentId_UpdatesTheFields()
|
||||
{
|
||||
Pet expected = BuildSamplePet(pet =>
|
||||
{
|
||||
pet.Name = "name updated";
|
||||
pet.Status = Pet.StatusEnum.Pending;
|
||||
});
|
||||
|
||||
await _petApi.UpdatePetWithFormAsync(PetId, "name updated", "pending");
|
||||
|
||||
Pet response = await _petApi.GetPetByIdAsync(PetId);
|
||||
|
||||
Assert.IsType<Pet>(response);
|
||||
Assert.Equal(expected.Name, response.Name);
|
||||
Assert.Equal(expected.Status, response.Status);
|
||||
Assert.IsType<List<Tag>>(response.Tags);
|
||||
Assert.Equal(expected.Tags[0].Id, response.Tags[0].Id);
|
||||
Assert.Equal(expected.Tags[0].Name, response.Tags[0].Name);
|
||||
Assert.IsType<List<string>>(response.PhotoUrls);
|
||||
Assert.Equal(expected.PhotoUrls[0], response.PhotoUrls[0]);
|
||||
Assert.IsType<Category>(response.Category);
|
||||
Assert.Equal(expected.Category.Id, response.Category.Id);
|
||||
Assert.Equal(expected.Category.Name, response.Category.Name);
|
||||
|
||||
await _petApi.UpdatePetWithFormAsync(PetId, "name updated twice");
|
||||
|
||||
response = await _petApi.GetPetByIdAsync(PetId);
|
||||
|
||||
Assert.Equal("name updated twice", response.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test UploadFileAsync with an existent Id.
|
||||
/// </summary>
|
||||
[Fact(Skip = "generates 500 code at the time of test")]
|
||||
public async Task UploadFileAsync_UploadFileUsingFormParameters_UpdatesTheFields()
|
||||
{
|
||||
var assembly = Assembly.GetExecutingAssembly();
|
||||
await using Stream imageStream = assembly.GetManifestResourceStream("Org.OpenAPITools.Test.linux-logo.png");
|
||||
await _petApi.UploadFileAsync(PetId, "metadata sample", imageStream);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test UploadFileAsync with an existent Id.
|
||||
/// </summary>
|
||||
[Fact(Skip = "generates 500 code at the time of test")]
|
||||
public async Task UploadFileAsync_UploadFileAlone_UpdatesTheField()
|
||||
{
|
||||
var assembly = Assembly.GetExecutingAssembly();
|
||||
await using Stream imageStream = assembly.GetManifestResourceStream("Org.OpenAPITools.Test.linux-logo.png");
|
||||
await _petApi.UploadFileAsync(petId: PetId, file: imageStream);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Delete
|
||||
|
||||
/// <summary>
|
||||
/// Test DeletePet with an existent Id.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void DeletePet_GivenExistentId_DeleteThePet()
|
||||
{
|
||||
_petApi.DeletePet(PetId);
|
||||
|
||||
var exception = Assert.Throws<ApiException>(() => _petApi.GetPetById(PetId));
|
||||
|
||||
Assert.IsType<ApiException>(exception);
|
||||
Assert.Equal(404, exception.ErrorCode);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test DeletePet with a not existent Id. The current server beavior is to return 404.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void DeletePet_GivenNotExistentId_ThrowsApiException()
|
||||
{
|
||||
var exception = Assert.Throws<ApiException>(() => _petApi.DeletePet(NotExistentId));
|
||||
|
||||
Assert.IsType<ApiException>(exception);
|
||||
Assert.Equal(404, exception.ErrorCode);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region DeleteAsync
|
||||
|
||||
/// <summary>
|
||||
/// Test DeletePet with an existent Id.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async Task DeletePetAsync_GivenExistentId_DeleteThePet()
|
||||
{
|
||||
await _petApi.DeletePetAsync(PetId);
|
||||
|
||||
var exception = Assert.Throws<ApiException>(() => _petApi.GetPetById(PetId));
|
||||
|
||||
Assert.IsType<ApiException>(exception);
|
||||
Assert.Equal(404, exception.ErrorCode);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test DeletePet with a not existent Id. The current server beavior is to return 404.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async Task DeletePetAsync_GivenNotExistentId_ThrowsApiException()
|
||||
{
|
||||
var exception = await Assert.ThrowsAsync<ApiException>(() => _petApi.DeletePetAsync(NotExistentId));
|
||||
|
||||
Assert.IsType<ApiException>(exception);
|
||||
Assert.Equal(404, exception.ErrorCode);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private static Pet BuildSamplePet(Action<Pet> callback = null)
|
||||
{
|
||||
var pet = new Pet(
|
||||
name: "csharp test",
|
||||
photoUrls: new List<string> { "http://petstore.com/csharp_test" })
|
||||
{
|
||||
Id = PetId,
|
||||
Status = Pet.StatusEnum.Available,
|
||||
Category = new Category { Id = 10, Name = "sample category" },
|
||||
Tags = new List<Tag> { new Tag { Id = 100, Name = "sample tag" } }
|
||||
};
|
||||
|
||||
callback?.Invoke(pet);
|
||||
|
||||
return pet;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
// remove the pet after testing
|
||||
try
|
||||
{
|
||||
_petApi.DeletePet(PetId);
|
||||
}
|
||||
catch (ApiException ex) when (ex.ErrorCode == 404) { }
|
||||
|
||||
_petApi.Dispose();
|
||||
_httpClient.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,10 +8,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Remove="linux-logo.png" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.2" />
|
||||
<PackageReference Include="xunit" Version="2.4.1" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1" />
|
||||
</ItemGroup>
|
||||
@@ -21,7 +18,9 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="linux-logo.png" />
|
||||
<None Remove="linux-logo.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="**/*" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -98,13 +98,13 @@ namespace Org.OpenAPITools.Client
|
||||
|
||||
if (type == typeof(byte[])) // return byte array
|
||||
{
|
||||
return response.Content.ReadAsByteArrayAsync().GetAwaiter().GetResult();
|
||||
return response.Content.ReadAsByteArrayAsync().Result;
|
||||
}
|
||||
|
||||
// TODO: ? if (type.IsAssignableFrom(typeof(Stream)))
|
||||
if (type == typeof(Stream))
|
||||
{
|
||||
var bytes = response.Content.ReadAsByteArrayAsync().GetAwaiter().GetResult();
|
||||
var bytes = response.Content.ReadAsByteArrayAsync().Result;
|
||||
if (headers != null)
|
||||
{
|
||||
var filePath = String.IsNullOrEmpty(_configuration.TempFolderPath)
|
||||
@@ -128,18 +128,18 @@ namespace Org.OpenAPITools.Client
|
||||
|
||||
if (type.Name.StartsWith("System.Nullable`1[[System.DateTime")) // return a datetime object
|
||||
{
|
||||
return DateTime.Parse(response.Content.ReadAsStringAsync().GetAwaiter().GetResult(), null, System.Globalization.DateTimeStyles.RoundtripKind);
|
||||
return DateTime.Parse(response.Content.ReadAsStringAsync().Result, null, System.Globalization.DateTimeStyles.RoundtripKind);
|
||||
}
|
||||
|
||||
if (type == typeof(String) || type.Name.StartsWith("System.Nullable")) // return primitive type
|
||||
{
|
||||
return Convert.ChangeType(response.Content.ReadAsStringAsync().GetAwaiter().GetResult(), type);
|
||||
return Convert.ChangeType(response.Content.ReadAsStringAsync().Result, type);
|
||||
}
|
||||
|
||||
// at this point, it must be a model (json)
|
||||
try
|
||||
{
|
||||
return JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().GetAwaiter().GetResult(), type, _serializerSettings);
|
||||
return JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().Result, type, _serializerSettings);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@@ -399,10 +399,10 @@ namespace Org.OpenAPITools.Client
|
||||
partial void InterceptRequest(HttpRequestMessage req);
|
||||
partial void InterceptResponse(HttpRequestMessage req, HttpResponseMessage response);
|
||||
|
||||
private async Task<ApiResponse<T>> ToApiResponse<T>(HttpResponseMessage response, object responseData, Uri uri)
|
||||
private ApiResponse<T> ToApiResponse<T>(HttpResponseMessage response, object responseData, Uri uri)
|
||||
{
|
||||
T result = (T) responseData;
|
||||
string rawContent = await response.Content.ReadAsStringAsync();
|
||||
string rawContent = response.Content.ToString();
|
||||
|
||||
var transformed = new ApiResponse<T>(response.StatusCode, new Multimap<string, string>(), result, rawContent)
|
||||
{
|
||||
@@ -444,7 +444,7 @@ namespace Org.OpenAPITools.Client
|
||||
|
||||
private ApiResponse<T> Exec<T>(HttpRequestMessage req, IReadableConfiguration configuration)
|
||||
{
|
||||
return ExecAsync<T>(req, configuration).GetAwaiter().GetResult();
|
||||
return ExecAsync<T>(req, configuration).Result;
|
||||
}
|
||||
|
||||
private async Task<ApiResponse<T>> ExecAsync<T>(HttpRequestMessage req,
|
||||
@@ -505,11 +505,6 @@ namespace Org.OpenAPITools.Client
|
||||
response = await _httpClient.SendAsync(req, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
if (!response.IsSuccessStatusCode)
|
||||
{
|
||||
return await ToApiResponse<T>(response, default(T), req.RequestUri);
|
||||
}
|
||||
|
||||
object responseData = deserializer.Deserialize<T>(response);
|
||||
|
||||
// if the response type is oneOf/anyOf, call FromJSON to deserialize the data
|
||||
@@ -524,7 +519,9 @@ namespace Org.OpenAPITools.Client
|
||||
|
||||
InterceptResponse(req, response);
|
||||
|
||||
return await ToApiResponse<T>(response, responseData, req.RequestUri);
|
||||
var result = ToApiResponse<T>(response, responseData, req.RequestUri);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#region IAsynchronousClient
|
||||
|
||||
@@ -1 +1 @@
|
||||
5.1.1
|
||||
5.1.1-SNAPSHOT
|
||||
@@ -1 +1 @@
|
||||
5.1.1
|
||||
5.1.1-SNAPSHOT
|
||||
@@ -1 +1 @@
|
||||
5.1.1
|
||||
5.1.1-SNAPSHOT
|
||||
@@ -1 +1 @@
|
||||
5.1.1
|
||||
5.1.1-SNAPSHOT
|
||||
@@ -1 +1 @@
|
||||
5.1.1
|
||||
5.1.1-SNAPSHOT
|
||||
@@ -1 +1 @@
|
||||
5.1.1
|
||||
5.1.1-SNAPSHOT
|
||||
@@ -1 +1 @@
|
||||
5.1.1
|
||||
5.1.1-SNAPSHOT
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user