61 const char* as_cstr(
const RequestMethod& m);
62 void from_string(
const std::string& s, RequestMethod& m);
84 const char* as_cstr(
const ContentType& t);
122 virtual const std::string&
body()
const = 0;
127 virtual const std::string&
uri()
const = 0;
141 virtual const std::map<std::string, std::string>&
query_map()
const = 0;
147 virtual bool has_json()
const {
return this->
type() == ContentType::JSON; }
167 PARTIAL_CONTENT = 206,
168 MULTIPLE_CHOICES = 300,
169 MOVED_PERMANENTLY = 301,
174 TEMPORARY_REDIRECT = 307,
180 NOT_ACCEPTABLE = 406,
181 REQUEST_TIMEOUT = 408,
185 NOT_IMPLEMENTED = 501,
186 SERVICE_UNAVAILABLE = 503,
226 const std::map<std::string, std::string>&
headers()
const {
return headers_; }
227 std::map<std::string, std::string>&
headers() {
return headers_; }
240 const std::string&
header(
const std::string& key) {
return this->
headers().at(key); }
246 void set_header(
const std::string& key,
const std::string& value) {
251 void set_status(StatusCode code) { status_ = code; }
254 void set_type(ContentType type) {
256 this->
set_header(
"Content-Type", as_cstr(type));
259 const std::string& body()
const {
return body_; }
265 if (!s.empty() && status_ == StatusCode::NO_CONTENT) {
266 status_ = StatusCode::OK;
268 this->set_type(type);
280 this->
set_body(js.dump(), ContentType::JSON);
282 this->
set_body(js.dump(4), ContentType::JSON);
311 this->set_status(StatusCode::NOT_ALLOWED);
329 this->set_status(code);
336 std::map<std::string, std::string> headers_;
347 using Handler = std::function<void(
const Request&, Response&)>;
363 explicit Redirect(
const std::string& location) : location_(location) {}
365 r.set_status(StatusCode::FOUND);
370 std::string location_;
393 template <
typename T>
396 explicit ToJson(
const T* ptr) : ptr_(ptr) {}
422 : ptr_(ptr), convert_(query_map_as_json) {}
Definition: handler.hpp:94
virtual const std::string & endpoint() const =0
virtual const std::map< std::string, std::string > & query_map() const =0
virtual const std::string & body() const =0
virtual bool has_json() const
Definition: handler.hpp:147
virtual ContentType type() const =0
virtual RequestMethod method() const =0
virtual fable::Json as_json() const
Definition: handler.hpp:152
virtual const std::string & uri() const =0
Definition: handler.hpp:196
void set_body(const fable::Json &js)
Definition: handler.hpp:278
void write(const fable::Json &js)
Definition: handler.hpp:289
const std::string & header(const std::string &key)
Definition: handler.hpp:240
Response()
Definition: handler.hpp:201
bool has_header(const std::string &key)
Definition: handler.hpp:232
void not_implemented(const fable::Json &js)
Definition: handler.hpp:320
void server_error(const fable::Json &js)
Definition: handler.hpp:325
const std::map< std::string, std::string > & headers() const
Definition: handler.hpp:226
void not_found(const fable::Json &js)
Definition: handler.hpp:300
void set_body(const std::string &s, ContentType type)
Definition: handler.hpp:264
void bad_request(const fable::Json &js)
Definition: handler.hpp:295
void not_allowed(const RequestMethod &allow, const fable::Json &js)
Definition: handler.hpp:310
void set_header(const std::string &key, const std::string &value)
Definition: handler.hpp:246
Definition: handler.hpp:419
Definition: handler.hpp:361
Definition: handler.hpp:376
Definition: handler.hpp:394
Definition: confable.hpp:98
std::function< void(const Request &, Response &)> Handler
Definition: cloe_fwd.hpp:65
nlohmann::json Json
Definition: fable_fwd.hpp:35
StatusCode
Definition: handler.hpp:161
RequestMethod
Definition: handler.hpp:54
ContentType
Definition: handler.hpp:71