18 #include <immer/map.hpp>
19 #include <immer/array.hpp>
20 #include <immer/box.hpp>
28 using Header = immer::box<std::map<std::string, std::string>>;
36 using Body = std::variant<EmptyBody, JsonBody, BytesBody, FileBody>;
39 return std::holds_alternative<JsonBody>(body);
62 std::string
dataStr(
const std::string &key)
const;
63 std::string
jobId()
const;
86 using Method = std::variant<Get, Post, Put, Delete>;
93 class Query :
public std::vector<std::pair<std::string, std::string>>
95 using BaseT = std::vector<std::pair<std::string, std::string>>;
98 void add(std::string k, std::string v) {
116 std::string requestUrl,
119 std::string token = {},
132 std::string
url()
const;
145 static bool contentTypeMatches(immer::array<std::string> expected, std::string actual);
156 std::string
dataStr(
const std::string &key)
const;
157 std::string
jobId()
const;
158 std::optional<std::string>
queueId()
const;
170 std::unique_ptr<Private> m_d;
180 q.
add(name, std::to_string(std::forward<U>(arg)));
185 struct AddToQueryT<
std::string>
189 q.
add(name, std::forward<U>(arg));
194 struct AddToQueryT<bool>
198 q.
add(name, std::forward<U>(arg) ?
"true"s :
"false"s);
203 struct AddToQueryT<immer::array<T>>
207 for (
auto v : std::forward<U>(arg)) {
214 struct AddToQueryT<
json>
219 for (
auto [k, v] : arg.items()) {
229 detail::AddToQueryT<std::decay_t<T>>::call(q, name, std::forward<T>(arg));
235 struct AddToQueryIfNeededT
238 static void call(BaseJob::Query &q, std::string name, U &&arg) {
239 using ArgT = std::decay_t<U>;
251 struct AddToQueryIfNeededT<
std::optional<T>>
254 static void call(BaseJob::Query &q, std::string name, U &&arg) {
255 if (arg.has_value()) {
256 addToQuery(q, name, std::forward<U>(arg).value());
265 detail::AddToQueryIfNeededT<std::decay_t<T>>::call(q, name, std::forward<T>(arg));
Definition: basejob.hpp:94
void add(std::string k, std::string v)
Definition: basejob.hpp:98
Definition: basejob.hpp:68
static bool contentTypeMatches(immer::array< std::string > expected, std::string actual)
Definition: basejob.cpp:162
friend bool operator==(const BaseJob &a, const BaseJob &b)
Definition: basejob.cpp:282
BaseJob(std::string serverUrl, std::string requestUrl, Method method, std::string jobId, std::string token={}, ReturnType returnType=ReturnType::Json, Body body=EmptyBody{}, Query query={}, Header header={}, std::optional< FileDesc > responseFile=std::nullopt)
Definition: basejob.cpp:87
std::optional< std::string > queueId() const
Definition: basejob.cpp:240
static Post POST
Definition: basejob.hpp:89
Method requestMethod() const
Definition: basejob.cpp:136
std::variant< Get, Post, Put, Delete > Method
Definition: basejob.hpp:86
json dataJson(const std::string &key) const
Definition: basejob.cpp:225
BaseJob withData(JsonWrap j) &&
Definition: basejob.cpp:195
std::string url() const
Definition: basejob.cpp:111
Header requestHeader() const
Definition: basejob.cpp:121
std::optional< FileDesc > responseFile() const
Definition: basejob.cpp:250
void attachData(JsonWrap data)
Definition: basejob.cpp:190
JobQueuePolicy queuePolicy() const
Definition: basejob.cpp:245
BaseJob withQueue(std::string id, JobQueuePolicy policy=AlwaysContinue) &&
Definition: basejob.cpp:209
static Delete DELETE
Definition: basejob.hpp:91
::Kazv::BytesBody BytesBody
Definition: basejob.hpp:104
std::string jobId() const
Definition: basejob.cpp:235
::Kazv::Header Header
Definition: basejob.hpp:107
::Kazv::EmptyBody EmptyBody
Definition: basejob.hpp:106
Body requestBody() const
Definition: basejob.cpp:116
bool shouldReturnJson() const
Definition: basejob.cpp:106
friend bool operator!=(const BaseJob &a, const BaseJob &b)
Definition: basejob.cpp:290
Query requestQuery() const
returns the non-encoded query as an array of pairs
Definition: basejob.cpp:131
static Put PUT
Definition: basejob.hpp:90
::Kazv::Body Body
Definition: basejob.hpp:103
static Get GET
Definition: basejob.hpp:88
ReturnType
Definition: basejob.hpp:110
@ Json
Definition: basejob.hpp:111
@ File
Definition: basejob.hpp:112
Response genResponse(Response r) const
Definition: basejob.cpp:182
ReturnType returnType() const
Definition: basejob.cpp:126
std::string dataStr(const std::string &key) const
Definition: basejob.cpp:230
Definition: file-desc.hpp:225
Definition: jsonwrap.hpp:23
#define KAZV_DECLARE_COPYABLE(typeName)
Definition: copy-helper.hpp:10
constexpr auto hasEmptyMethod
Definition: types.hpp:37
Definition: location.hpp:10
Bytes BytesBody
Definition: basejob.hpp:30
void addToQueryIfNeeded(BaseJob::Query &q, std::string name, T &&arg)
Definition: basejob.hpp:263
std::variant< EmptyBody, JsonBody, BytesBody, FileBody > Body
Definition: basejob.hpp:36
bool isBodyJson(Body body)
Definition: basejob.hpp:38
nlohmann::json json
Definition: jsonwrap.hpp:20
std::string Bytes
Definition: types.hpp:27
JobQueuePolicy
Definition: basejob.hpp:43
@ CancelFutureIfFailed
Definition: basejob.hpp:45
@ AlwaysContinue
Definition: basejob.hpp:44
void addToQuery(BaseJob::Query &q, std::string name, T &&arg)
Definition: basejob.hpp:227
JsonWrap JsonBody
Definition: basejob.hpp:31
immer::box< std::map< std::string, std::string > > Header
Definition: basejob.hpp:28
Definition: clientutil.hpp:213
Definition: basejob.hpp:83
friend bool operator==(BaseJob::Delete, BaseJob::Delete)=default
Definition: basejob.hpp:71
friend bool operator==(BaseJob::Get, BaseJob::Get)=default
Definition: basejob.hpp:75
friend bool operator==(BaseJob::Post, BaseJob::Post)=default
Definition: basejob.cpp:24
Definition: basejob.hpp:79
friend bool operator==(BaseJob::Put, BaseJob::Put)=default
Definition: basejob.hpp:33
friend bool operator==(EmptyBody, EmptyBody)=default
Definition: basejob.hpp:49
Header header
Definition: basejob.hpp:53
std::string errorCode() const
Definition: basejob.cpp:255
std::string jobId() const
Definition: basejob.cpp:156
JsonWrap extraData
Definition: basejob.hpp:54
int StatusCode
Definition: basejob.hpp:50
constexpr bool success() const
Definition: basejob.hpp:58
JsonWrap jsonBody() const
Definition: basejob.cpp:141
std::string dataStr(const std::string &key) const
Definition: basejob.cpp:151
StatusCode statusCode
Definition: basejob.hpp:51
Body body
Definition: basejob.hpp:52
json dataJson(const std::string &key) const
Definition: basejob.cpp:146
friend bool operator==(const Response &a, const Response &b)=default
std::string errorMessage() const
Definition: basejob.cpp:270