4#include "CoreMinimal.h"
5#include "HttpResponse.h"
6#include "Interfaces/IHttpRequest.h"
7#include "QueryParameters.h"
12DECLARE_LOG_CATEGORY_EXTERN(LogHttpClient, Verbose, All);
19 explicit TResponse(
const FHttpResponse& Response)
21 if (Response.IsSuccessful())
23 ResponseOrError.template Set<T>(Response.Json<T>());
27 ResponseOrError.template Set<FString>(TEXT(
"Error"));
31 bool IsSuccessful()
const
33 return ResponseOrError.template IsType<T>();
39 return ResponseOrError.template TryGet<T>();
43 const T& GetRef()
const
45 return ResponseOrError.template Get<T>();
49 TVariant<T, FString> ResponseOrError;
52class HTTPREQUESTS_API FRequestBuilder
55 FRequestBuilder() =
delete;
57 explicit FRequestBuilder(
const TSharedRef<const FHttpClient>&,
const FString& Verb,
const FString& Url);
65 FRequestBuilder& Header(
const FQueryParameters& Headers);
67 FRequestBuilder& Body(
const FString&
Text);
68 FRequestBuilder&
Query(
const FQueryParameters&
Query);
80 FRequestBuilder& Json(
const T& Struct, ENamingConvention NamingConvention = ENamingConvention::SnakeCase);
81 FRequestBuilder& EmptyJson();
88 void Send(TFunction<
void(
const FHttpResponse&)> Callback);
97 void Send(TFunction<
void(
const TResponse<T>&)> Callback);
102 FRequestBuilder& Json(
const FString& Json);
105 TSharedPtr<const FHttpClient> Client;
106 FHttpRequestPtr Request;
108 FQueryParameters QueryParameters;
109 TFunction<void(
const FHttpResponse&)> RetainedCallback;
113FRequestBuilder& FRequestBuilder::Json(
const T& Struct, ENamingConvention NamingConvention)
115 const FString JsonBody = Json::Serialize(Struct, NamingConvention);
116 return Json(JsonBody);
120void FRequestBuilder::Send(TFunction<
void(
const TResponse<T>&)> Callback)
123 [Callback](
const FHttpResponse& Response)
127 Callback(TResponse<T>(Response));
@ Text
Text of the message.
@ Query
Matches values by performing text search with the specified value.