10#define FMT_HEADER_ONLY
11#include <fmt/format.h>
12#include <llhttp/llhttp.h>
21 std::string header_string;
22 for (
const auto& [k, v] : headers)
24 header_string += fmt::format(
"{}: {}\r\n", k, v);
34 const uint8_t*
body =
nullptr;
48 ccf::nonstd::to_lower(k);
91 headers[ccf::http::headers::CONTENT_LENGTH] =
97 body = (uint8_t*)s.data();
100 headers[ccf::http::headers::CONTENT_LENGTH] =
108 llhttp_method method;
109 std::string path =
"/";
110 std::map<std::string, std::string> query_params = {};
113 Request(
const std::string_view& p =
"/", llhttp_method m = HTTP_POST) :
132 if (p.size() > 0 && p[0] ==
'/')
138 path = fmt::format(
"/{}", p);
154 std::string formatted_query;
156 for (
const auto& it : query_params)
159 fmt::format(
"{}{}={}", (first ?
'?' :
'&'), it.first, it.second);
162 return formatted_query;
169 const auto body_view = (header_only ||
body ==
nullptr) ?
173 const auto request_string = fmt::format(
178 llhttp_method_name(method),
183 return std::vector<uint8_t>(request_string.begin(), request_string.end());
197 const auto body_view = (header_only ||
body ==
nullptr) ?
201 const auto response_string = fmt::format(
207 http_status_str(status),
211 return std::vector<uint8_t>(
212 response_string.begin(), response_string.end());
217#pragma clang diagnostic push
218#pragma clang diagnostic ignored "-Wunused-function"
221 static std::vector<uint8_t> build_header(
222 llhttp_method method,
const std::vector<uint8_t>& body)
224 Request r(
"/", method);
226 return r.build_request(
true);
229 static std::vector<uint8_t> build_request(
230 llhttp_method method,
const std::vector<uint8_t>& body)
232 Request r(
"/", method);
234 return r.build_request(
false);
238 static std::vector<uint8_t> build_delete_header(
239 const std::vector<uint8_t>& body)
241 return build_header(HTTP_DELETE, body);
244 static std::vector<uint8_t> build_delete_request(
245 const std::vector<uint8_t>& body)
247 return build_request(HTTP_DELETE, body);
251 static std::vector<uint8_t> build_get_header(
const std::vector<uint8_t>& body)
253 return build_header(HTTP_GET, body);
256 static std::vector<uint8_t> build_get_request(
257 const std::vector<uint8_t>& body)
259 return build_request(HTTP_GET, body);
263 static std::vector<uint8_t> build_post_header(
264 const std::vector<uint8_t>& body)
266 return build_header(HTTP_POST, body);
269 static std::vector<uint8_t> build_post_request(
270 const std::vector<uint8_t>& body)
272 return build_request(HTTP_POST, body);
276 static std::vector<uint8_t> build_put_header(
const std::vector<uint8_t>& body)
278 return build_header(HTTP_PUT, body);
281 static std::vector<uint8_t> build_put_request(
282 const std::vector<uint8_t>& body)
284 return build_request(HTTP_PUT, body);
286#pragma clang diagnostic pop
Definition http_builder.h:31
void set_body(const std::vector< uint8_t > *b)
Definition http_builder.h:74
ccf::http::HeaderMap headers
Definition http_builder.h:33
const uint8_t * body
Definition http_builder.h:34
const ccf::http::HeaderMap & get_headers() const
Definition http_builder.h:40
size_t get_content_length() const
Definition http_builder.h:57
void set_header(std::string k, const std::string &v)
Definition http_builder.h:45
void set_body(const std::string &s)
Definition http_builder.h:95
void set_body(const uint8_t *b, size_t s)
Definition http_builder.h:86
const uint8_t * get_content_data() const
Definition http_builder.h:69
size_t body_size
Definition http_builder.h:35
void clear_headers()
Definition http_builder.h:52
Definition http_builder.h:106
std::vector< uint8_t > build_request(bool header_only=false) const
Definition http_builder.h:165
std::string get_path() const
Definition http_builder.h:142
std::string get_formatted_query() const
Definition http_builder.h:152
void set_method(llhttp_method m)
Definition http_builder.h:120
llhttp_method get_method() const
Definition http_builder.h:125
Request(const std::string_view &p="/", llhttp_method m=HTTP_POST)
Definition http_builder.h:113
void set_query_param(const std::string &k, const std::string &v)
Definition http_builder.h:147
void set_path(const std::string_view &p)
Definition http_builder.h:130
Definition http_builder.h:188
std::vector< uint8_t > build_response(bool header_only=false) const
Definition http_builder.h:195
Response(http_status s=HTTP_STATUS_OK)
Definition http_builder.h:193
llhttp_status http_status
Definition http_status.h:7
std::map< std::string, std::string, std::less<> > HeaderMap
Definition http_header_map.h:10
Definition error_reporter.h:6