/** * OpenAPI Petstore * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. * * OpenAPI spec version: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator * https://github.com/OpenAPITools/openapi-generator * Do not edit the class manually. */ #include "OpenAPIStoreApi.h" #include "OpenAPIStoreApiOperations.h" #include "OpenAPIModule.h" #include "HttpModule.h" #include "Serialization/JsonSerializer.h" namespace OpenAPI { OpenAPIStoreApi::OpenAPIStoreApi() : Url(TEXT("http://petstore.swagger.io/v2")) { } OpenAPIStoreApi::~OpenAPIStoreApi() {} void OpenAPIStoreApi::SetURL(const FString& InUrl) { Url = InUrl; } void OpenAPIStoreApi::AddHeaderParam(const FString& Key, const FString& Value) { AdditionalHeaderParams.Add(Key, Value); } void OpenAPIStoreApi::ClearHeaderParams() { AdditionalHeaderParams.Reset(); } bool OpenAPIStoreApi::IsValid() const { if (Url.IsEmpty()) { UE_LOG(LogOpenAPI, Error, TEXT("OpenAPIStoreApi: Endpoint Url is not set, request cannot be performed")); return false; } 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(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); InOutResponse.SetSuccessful(bSucceeded); if (bSucceeded && HttpResponse.IsValid()) { InOutResponse.SetHttpResponseCode((EHttpResponseCodes::Type)HttpResponse->GetResponseCode()); FString ContentType = HttpResponse->GetContentType(); FString Content; if (ContentType.IsEmpty()) { return; // Nothing to parse } else if (ContentType.StartsWith(TEXT("application/json")) || ContentType.StartsWith("text/json")) { Content = HttpResponse->GetContentAsString(); TSharedPtr JsonValue; auto Reader = TJsonReaderFactory<>::Create(Content); if (FJsonSerializer::Deserialize(Reader, JsonValue) && JsonValue.IsValid()) { if (InOutResponse.FromJson(JsonValue)) return; // Successfully parsed } } else if(ContentType.StartsWith(TEXT("text/plain"))) { Content = HttpResponse->GetContentAsString(); InOutResponse.SetResponseString(Content); return; // Successfully parsed } // Report the parse error but do not mark the request as unsuccessful. Data could be partial or malformed, but the request succeeded. UE_LOG(LogOpenAPI, Error, TEXT("Failed to deserialize Http response content (type:%s):\n%s"), *ContentType , *Content); return; } // By default, assume we failed to establish connection InOutResponse.SetHttpResponseCode(EHttpResponseCodes::RequestTimeout); } FHttpRequestPtr OpenAPIStoreApi::DeleteOrder(const DeleteOrderRequest& Request, const FDeleteOrderDelegate& Delegate /*= FDeleteOrderDelegate()*/) const { if (!IsValid()) return nullptr; FHttpRequestRef HttpRequest = CreateHttpRequest(Request); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) { HttpRequest->SetHeader(It.Key, It.Value); } Request.SetupHttpRequest(HttpRequest); HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnDeleteOrderResponse, Delegate); HttpRequest->ProcessRequest(); return HttpRequest; } void OpenAPIStoreApi::OnDeleteOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeleteOrderDelegate Delegate) const { DeleteOrderResponse Response; HandleResponse(HttpResponse, bSucceeded, Response); Delegate.ExecuteIfBound(Response); } FHttpRequestPtr OpenAPIStoreApi::GetInventory(const GetInventoryRequest& Request, const FGetInventoryDelegate& Delegate /*= FGetInventoryDelegate()*/) const { if (!IsValid()) return nullptr; FHttpRequestRef HttpRequest = CreateHttpRequest(Request); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) { HttpRequest->SetHeader(It.Key, It.Value); } Request.SetupHttpRequest(HttpRequest); HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnGetInventoryResponse, Delegate); HttpRequest->ProcessRequest(); return HttpRequest; } void OpenAPIStoreApi::OnGetInventoryResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetInventoryDelegate Delegate) const { GetInventoryResponse Response; HandleResponse(HttpResponse, bSucceeded, Response); Delegate.ExecuteIfBound(Response); } FHttpRequestPtr OpenAPIStoreApi::GetOrderById(const GetOrderByIdRequest& Request, const FGetOrderByIdDelegate& Delegate /*= FGetOrderByIdDelegate()*/) const { if (!IsValid()) return nullptr; FHttpRequestRef HttpRequest = CreateHttpRequest(Request); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) { HttpRequest->SetHeader(It.Key, It.Value); } Request.SetupHttpRequest(HttpRequest); HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnGetOrderByIdResponse, Delegate); HttpRequest->ProcessRequest(); return HttpRequest; } void OpenAPIStoreApi::OnGetOrderByIdResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetOrderByIdDelegate Delegate) const { GetOrderByIdResponse Response; HandleResponse(HttpResponse, bSucceeded, Response); Delegate.ExecuteIfBound(Response); } FHttpRequestPtr OpenAPIStoreApi::PlaceOrder(const PlaceOrderRequest& Request, const FPlaceOrderDelegate& Delegate /*= FPlaceOrderDelegate()*/) const { if (!IsValid()) return nullptr; FHttpRequestRef HttpRequest = CreateHttpRequest(Request); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) { HttpRequest->SetHeader(It.Key, It.Value); } Request.SetupHttpRequest(HttpRequest); HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnPlaceOrderResponse, Delegate); HttpRequest->ProcessRequest(); return HttpRequest; } void OpenAPIStoreApi::OnPlaceOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FPlaceOrderDelegate Delegate) const { PlaceOrderResponse Response; HandleResponse(HttpResponse, bSucceeded, Response); Delegate.ExecuteIfBound(Response); } }