26#ifndef MYSQLROUTER_REST_API_UTILS_INCLUDED
27#define MYSQLROUTER_REST_API_UTILS_INCLUDED
33#ifdef RAPIDJSON_NO_SIZETYPEDEFINE
37#include <rapidjson/document.h>
58 const std::map<std::string, std::string> &fields);
127 const rapidjson::Document &json_doc);
132template <
class Encoding,
class AllocatorType>
134 std::chrono::time_point<std::chrono::system_clock> tp,
135 AllocatorType &allocator) {
136 time_t cur = std::chrono::system_clock::to_time_t(tp);
137 struct tm cur_gmtime;
139 gmtime_s(&cur_gmtime, &cur);
141 gmtime_r(&cur, &cur_gmtime);
143 auto usec = std::chrono::duration_cast<std::chrono::microseconds>(
144 tp - std::chrono::system_clock::from_time_t(cur));
147 "%04d-%02d-%02dT%02d:%02d:%02d.%06ldZ", cur_gmtime.tm_year + 1900,
148 cur_gmtime.tm_mon + 1, cur_gmtime.tm_mday, cur_gmtime.tm_hour,
149 cur_gmtime.tm_min, cur_gmtime.tm_sec,
152 static_cast<long int>(usec.count()))};
154 return {iso8601_datetime.c_str(), iso8601_datetime.size(), allocator};
Define rapidjson::SizeType to be std::size_t.
std::bitset< Pos::_LAST+1 > Bitset
Definition: method.h:57
int key_type
Definition: status_code.h:36
HARNESS_EXPORT std::string string_format(const char *format,...)
Definition: utilities.cc:64
bool ensure_no_params(http::base::Request &req)
ensure request has no parameters.
Definition: rest_api_utils.cc:145
bool ensure_auth(http::base::Request &req, const std::string require_realm)
ensure request is authenticated.
Definition: rest_api_utils.cc:129
rapidjson::GenericValue< Encoding, AllocatorType > json_value_from_timepoint(std::chrono::time_point< std::chrono::system_clock > tp, AllocatorType &allocator)
format a timepoint as json-value (date-time format).
Definition: rest_api_utils.h:133
void send_rfc7807_not_found_error(http::base::Request &req)
send a JsonProblem "Not Found" error.
Definition: rest_api_utils.cc:81
bool ensure_modified_since(http::base::Request &req, time_t last_modified)
ensure resource has modified since client received it.
Definition: rest_api_utils.cc:158
void send_json_document(http::base::Request &req, HttpStatusCode::key_type status_code, const rapidjson::Document &json_doc)
send json document as HTTP response.
Definition: rest_api_utils.cc:40
void send_rfc7807_error(http::base::Request &req, HttpStatusCode::key_type status_code, const std::map< std::string, std::string > &fields)
send a JsonProblem HTTP response.
Definition: rest_api_utils.cc:58
bool ensure_http_method(http::base::Request &req, HttpMethod::Bitset allowed_methods)
ensure HTTP method is allowed.
Definition: rest_api_utils.cc:89