userver: userver/server/http/http_error.hpp Source File
⚠️ This is the documentation for an old userver version. Click here to switch to the latest version.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
http_error.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/server/http/http_error.hpp
4/// @brief @copybrief server::http::GetHttpStatus
5
6#include <stdexcept>
7#include <string>
8
9#include <userver/server/handlers/exceptions.hpp>
10#include <userver/server/http/http_status.hpp>
11
12USERVER_NAMESPACE_BEGIN
13
14namespace server::http {
15
16/**
17 * @brief Get http status code mapped to generic handler error code.
18 *
19 * If there is no explicit mapping in the http_error.cpp, will return
20 * HttpStatus::kBadRequest for code values less than
21 * HandlerErrorCode::kServerSideError and will return
22 * HttpStatus::kInternalServerError for the rest of codes.
23 */
25
26/// For server::http::CustomHandlerException, uses the provided HttpStatus.
27/// For a generic server::handler::CustomHandlerException, converts its
28/// server::handler::HandlerErrorCode to HttpStatus.
30 const handlers::CustomHandlerException& exception) noexcept;
31
32/// @brief An extension of server::handlers::CustomHandlerException that allows
33/// to specify a custom HttpStatus.
34///
35/// For non-HTTP protocols, the status code will be derived from the attached
36/// server::handlers::HandlerErrorCode.
38 public:
39 /// @see server::handlers::CustomHandlerException for the description of how
40 /// `args` that can augment error messages.
41 /// @snippet server/handlers/exceptions_test.cpp Sample construction HTTP
42 template <typename... Args>
44 HttpStatus http_status, Args&&... args)
45 : handlers::CustomHandlerException(error_code,
46 std::forward<Args>(args)...),
47 http_status_(http_status) {}
48
49 HttpStatus GetHttpStatus() const { return http_status_; }
50
51 private:
52 HttpStatus http_status_;
53};
54
55} // namespace server::http
56
57USERVER_NAMESPACE_END