Skip to content

Commit 7142a19

Browse files
Add payload to delete operation
1 parent cd50797 commit 7142a19

5 files changed

Lines changed: 189 additions & 52 deletions

File tree

src/HTTPRequest.cpp

Lines changed: 84 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -578,29 +578,93 @@ void HTTPRequest::delete_(std::variant<TRequestParameters<std::string>,
578578
std::visit(
579579
[&](auto&& arg)
580580
{
581-
auto req {DeleteRequest::builder(
582-
FactoryRequestWrapper<wrapperType>::create(response, handlerType, shouldRun))};
583-
req.url(arg.url.url(), arg.secureCommunication)
584-
.appendHeaders(arg.httpHeaders)
585-
.timeout(timeout)
586-
.userAgent(userAgent)
587-
.outputFile(outputFile)
588-
.execute();
581+
using T = std::decay_t<decltype(arg)>;
582+
if constexpr (std::is_same_v<T, TRequestParameters<std::string>>)
583+
{
584+
auto req {DeleteRequest::builder(
585+
FactoryRequestWrapper<wrapperType>::create(response, handlerType, shouldRun))};
586+
req.url(arg.url.url(), arg.secureCommunication)
587+
.template postData<const std::string&>(arg.data)
588+
.appendHeaders(arg.httpHeaders)
589+
.timeout(timeout)
590+
.userAgent(userAgent)
591+
.outputFile(outputFile)
592+
.execute();
589593

590-
std::visit(
591-
[&](auto&& arg)
592-
{
593-
using Tb = std::decay_t<decltype(arg)>;
594-
if constexpr (std::is_same_v<Tb, TPostRequestParameters<const std::string&>>)
594+
std::visit(
595+
[&](auto&& arg)
595596
{
596-
arg.onSuccess(response);
597-
}
598-
else if constexpr (std::is_same_v<Tb, TPostRequestParameters<std::string&&>>)
597+
using Tb = std::decay_t<decltype(arg)>;
598+
if constexpr (std::is_same_v<Tb, TPostRequestParameters<const std::string&>>)
599+
{
600+
arg.onSuccess(response);
601+
}
602+
else if constexpr (std::is_same_v<Tb, TPostRequestParameters<std::string&&>>)
603+
{
604+
arg.onSuccess(std::move(response));
605+
}
606+
},
607+
postRequestParameters);
608+
}
609+
else if constexpr (std::is_same_v<T, TRequestParameters<std::string_view>>)
610+
{
611+
auto req {DeleteRequest::builder(
612+
FactoryRequestWrapper<wrapperType>::create(response, handlerType, shouldRun))};
613+
req.url(arg.url.url(), arg.secureCommunication)
614+
.template postData<std::string_view>(arg.data)
615+
.appendHeaders(arg.httpHeaders)
616+
.timeout(timeout)
617+
.userAgent(userAgent)
618+
.outputFile(outputFile)
619+
.execute();
620+
621+
std::visit(
622+
[&](auto&& arg)
599623
{
600-
arg.onSuccess(std::move(response));
601-
}
602-
},
603-
postRequestParameters);
624+
using Tb = std::decay_t<decltype(arg)>;
625+
if constexpr (std::is_same_v<Tb, TPostRequestParameters<const std::string&>>)
626+
{
627+
arg.onSuccess(response);
628+
}
629+
else if constexpr (std::is_same_v<Tb, TPostRequestParameters<std::string&&>>)
630+
{
631+
arg.onSuccess(std::move(response));
632+
}
633+
},
634+
postRequestParameters);
635+
}
636+
else if constexpr (std::is_same_v<T, TRequestParameters<nlohmann::json>>)
637+
{
638+
const std::string data = arg.data.dump();
639+
auto req {DeleteRequest::builder(
640+
FactoryRequestWrapper<wrapperType>::create(response, handlerType, shouldRun))};
641+
req.url(arg.url.url(), arg.secureCommunication)
642+
.template postData<const std::string&>(data)
643+
.appendHeaders(arg.httpHeaders)
644+
.timeout(timeout)
645+
.userAgent(userAgent)
646+
.outputFile(outputFile)
647+
.execute();
648+
649+
std::visit(
650+
[&](auto&& arg)
651+
{
652+
using Tb = std::decay_t<decltype(arg)>;
653+
if constexpr (std::is_same_v<Tb, TPostRequestParameters<const std::string&>>)
654+
{
655+
arg.onSuccess(response);
656+
}
657+
else if constexpr (std::is_same_v<Tb, TPostRequestParameters<std::string&&>>)
658+
{
659+
arg.onSuccess(std::move(response));
660+
}
661+
},
662+
postRequestParameters);
663+
}
664+
else
665+
{
666+
throw std::runtime_error("Invalid type");
667+
}
604668
},
605669
requestParameters);
606670
}

src/UNIXSocketRequest.cpp

Lines changed: 84 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -574,29 +574,93 @@ void UNIXSocketRequest::delete_(std::variant<TRequestParameters<std::string>,
574574
std::visit(
575575
[&](auto&& arg)
576576
{
577-
auto req {DeleteRequest::builder(
578-
FactoryRequestWrapper<wrapperType>::create(response, handlerType, shouldRun))};
579-
req.url(arg.url.url(), arg.secureCommunication)
580-
.unixSocketPath(arg.url.unixSocketPath())
581-
.timeout(timeout)
582-
.userAgent(userAgent)
583-
.outputFile(outputFile)
584-
.execute();
577+
using T = std::decay_t<decltype(arg)>;
578+
if constexpr (std::is_same_v<T, TRequestParameters<std::string>>)
579+
{
580+
auto req {DeleteRequest::builder(
581+
FactoryRequestWrapper<wrapperType>::create(response, handlerType, shouldRun))};
582+
req.url(arg.url.url(), arg.secureCommunication)
583+
.unixSocketPath(arg.url.unixSocketPath())
584+
.timeout(timeout)
585+
.userAgent(userAgent)
586+
.template postData<const std::string&>(arg.data)
587+
.outputFile(outputFile)
588+
.execute();
585589

586-
std::visit(
587-
[&](auto&& arg)
588-
{
589-
using Tb = std::decay_t<decltype(arg)>;
590-
if constexpr (std::is_same_v<Tb, TPostRequestParameters<const std::string&>>)
590+
std::visit(
591+
[&](auto&& arg)
591592
{
592-
arg.onSuccess(response);
593-
}
594-
else if constexpr (std::is_same_v<Tb, TPostRequestParameters<std::string&&>>)
593+
using Tb = std::decay_t<decltype(arg)>;
594+
if constexpr (std::is_same_v<Tb, TPostRequestParameters<const std::string&>>)
595+
{
596+
arg.onSuccess(response);
597+
}
598+
else if constexpr (std::is_same_v<Tb, TPostRequestParameters<std::string&&>>)
599+
{
600+
arg.onSuccess(std::move(response));
601+
}
602+
},
603+
postRequestParameters);
604+
}
605+
else if constexpr (std::is_same_v<T, TRequestParameters<std::string_view>>)
606+
{
607+
auto req {DeleteRequest::builder(
608+
FactoryRequestWrapper<wrapperType>::create(response, handlerType, shouldRun))};
609+
req.url(arg.url.url(), arg.secureCommunication)
610+
.unixSocketPath(arg.url.unixSocketPath())
611+
.timeout(timeout)
612+
.userAgent(userAgent)
613+
.template postData<std::string_view>(arg.data)
614+
.outputFile(outputFile)
615+
.execute();
616+
617+
std::visit(
618+
[&](auto&& arg)
595619
{
596-
arg.onSuccess(std::move(response));
597-
}
598-
},
599-
postRequestParameters);
620+
using Tb = std::decay_t<decltype(arg)>;
621+
if constexpr (std::is_same_v<Tb, TPostRequestParameters<const std::string&>>)
622+
{
623+
arg.onSuccess(response);
624+
}
625+
else if constexpr (std::is_same_v<Tb, TPostRequestParameters<std::string&&>>)
626+
{
627+
arg.onSuccess(std::move(response));
628+
}
629+
},
630+
postRequestParameters);
631+
}
632+
else if constexpr (std::is_same_v<T, TRequestParameters<nlohmann::json>>)
633+
{
634+
const auto data = arg.data.dump();
635+
auto req {DeleteRequest::builder(
636+
FactoryRequestWrapper<wrapperType>::create(response, handlerType, shouldRun))};
637+
req.url(arg.url.url(), arg.secureCommunication)
638+
.template postData<const std::string&>(data)
639+
.appendHeaders(arg.httpHeaders)
640+
.timeout(timeout)
641+
.userAgent(userAgent)
642+
.outputFile(outputFile)
643+
.execute();
644+
645+
std::visit(
646+
[&](auto&& arg)
647+
{
648+
using Tb = std::decay_t<decltype(arg)>;
649+
if constexpr (std::is_same_v<Tb, TPostRequestParameters<const std::string&>>)
650+
{
651+
arg.onSuccess(response);
652+
}
653+
else if constexpr (std::is_same_v<Tb, TPostRequestParameters<std::string&&>>)
654+
{
655+
arg.onSuccess(std::move(response));
656+
}
657+
},
658+
postRequestParameters);
659+
}
660+
else
661+
{
662+
throw std::runtime_error("Invalid type");
663+
}
600664
},
601665
requestParameters);
602666
}

src/urlRequest.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,7 @@ class GetRequest final : public cURLRequest<GetRequest>
436436
/**
437437
* @brief This class is a wrapper for curl library. It provides a simple interface to perform HTTP DELETE requests.
438438
*/
439-
class DeleteRequest final : public cURLRequest<DeleteRequest>
439+
class DeleteRequest final : public cURLRequest<DeleteRequest>, public PostData<DeleteRequest>
440440
{
441441
public:
442442
/**
@@ -445,6 +445,7 @@ class DeleteRequest final : public cURLRequest<DeleteRequest>
445445
*/
446446
explicit DeleteRequest(std::shared_ptr<IRequestImplementator> requestImplementator)
447447
: cURLRequest<DeleteRequest>(requestImplementator)
448+
, PostData<DeleteRequest>(requestImplementator)
448449
{
449450
requestImplementator->setOptionString(OPT_CUSTOMREQUEST, METHOD_TYPE_MAP.at(METHOD_DELETE));
450451
}

test_tool/actions.hpp

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ class PutAction final : public IAction
227227
void execute() override
228228
{
229229
HTTPRequest::instance().put(
230-
RequestParameters {.url = HttpURL(m_url),
230+
TRequestParameters<nlohmann::json> {.url = HttpURL(m_url),
231231
.data = m_data,
232232
.secureCommunication = m_secureCommunication,
233233
.httpHeaders = m_headers},
@@ -286,7 +286,7 @@ class PatchAction final : public IAction
286286
void execute() override
287287
{
288288
HTTPRequest::instance().patch(
289-
RequestParameters {.url = HttpURL(m_url),
289+
TRequestParameters<nlohmann::json> {.url = HttpURL(m_url),
290290
.data = m_data,
291291
.secureCommunication = m_secureCommunication,
292292
.httpHeaders = m_headers},
@@ -309,6 +309,7 @@ class DeleteAction final : public IAction
309309
{
310310
private:
311311
std::string m_url;
312+
nlohmann::json m_data;
312313
std::unordered_set<std::string> m_headers;
313314
SecureCommunication m_secureCommunication;
314315
long m_timeout;
@@ -322,10 +323,12 @@ class DeleteAction final : public IAction
322323
* @param timeout Timeout for the request.
323324
*/
324325
explicit DeleteAction(const std::string& url,
326+
const nlohmann::json& data,
325327
const std::unordered_set<std::string>& headers,
326328
const SecureCommunication& secureCommunication,
327329
const long timeout)
328330
: m_url(url)
331+
, m_data(data)
329332
, m_headers(headers)
330333
, m_secureCommunication(secureCommunication)
331334
, m_timeout(timeout)
@@ -338,17 +341,21 @@ class DeleteAction final : public IAction
338341
void execute() override
339342
{
340343
HTTPRequest::instance().delete_(
341-
RequestParameters {
342-
.url = HttpURL(m_url), .secureCommunication = m_secureCommunication, .httpHeaders = m_headers},
343-
PostRequestParameters {
344+
TRequestParameters<nlohmann::json> {
345+
.url = HttpURL(m_url),
346+
.data = m_data,
347+
.secureCommunication = m_secureCommunication,
348+
.httpHeaders = m_headers
349+
},
350+
PostRequestParameters{
344351
.onSuccess = [](const std::string& msg) { std::cout << msg << std::endl; },
345-
.onError =
346-
[](const std::string& msg, const long responseCode, const std::string& responseBody)
352+
.onError = [](const std::string& msg, const long code, const std::string& body)
347353
{
348-
std::cerr << msg << ": " << responseCode << ". Response body: " << responseBody << std::endl;
354+
std::cerr << msg << ": " << code << ". Response body: " << body << std::endl;
349355
throw std::runtime_error(msg);
350-
}},
351-
ConfigurationParameters {.timeout = m_timeout});
356+
}
357+
},
358+
ConfigurationParameters{.timeout = m_timeout});
352359
}
353360
};
354361

test_tool/factoryAction.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@ class FactoryAction final
7878
}
7979
else if (0 == args.type().compare("delete"))
8080
{
81-
return std::make_unique<DeleteAction>(args.url(), headers, secureCommunication, timeout);
81+
return std::make_unique<DeleteAction>(
82+
args.url(), args.postArguments(), headers, secureCommunication, timeout);
8283
}
8384
else
8485
{

0 commit comments

Comments
 (0)