1 #ifndef SIMPLE_WEB_STATUS_CODE_HPP
2 #define SIMPLE_WEB_STATUS_CODE_HPP
8 enum class StatusCode {
10 information_continue = 100,
11 information_switching_protocols,
12 information_processing,
16 success_non_authoritative_information,
18 success_reset_content,
19 success_partial_content,
21 success_already_reported,
22 success_im_used = 226,
23 redirection_multiple_choices = 300,
24 redirection_moved_permanently,
26 redirection_see_other,
27 redirection_not_modified,
28 redirection_use_proxy,
29 redirection_switch_proxy,
30 redirection_temporary_redirect,
31 redirection_permanent_redirect,
32 client_error_bad_request = 400,
33 client_error_unauthorized,
34 client_error_payment_required,
35 client_error_forbidden,
36 client_error_not_found,
37 client_error_method_not_allowed,
38 client_error_not_acceptable,
39 client_error_proxy_authentication_required,
40 client_error_request_timeout,
41 client_error_conflict,
43 client_error_length_required,
44 client_error_precondition_failed,
45 client_error_payload_too_large,
46 client_error_uri_too_long,
47 client_error_unsupported_media_type,
48 client_error_range_not_satisfiable,
49 client_error_expectation_failed,
50 client_error_im_a_teapot,
51 client_error_misdirection_required = 421,
52 client_error_unprocessable_entity,
54 client_error_failed_dependency,
55 client_error_upgrade_required = 426,
56 client_error_precondition_required = 428,
57 client_error_too_many_requests,
58 client_error_request_header_fields_too_large = 431,
59 client_error_unavailable_for_legal_reasons = 451,
60 server_error_internal_server_error = 500,
61 server_error_not_implemented,
62 server_error_bad_gateway,
63 server_error_service_unavailable,
64 server_error_gateway_timeout,
65 server_error_http_version_not_supported,
66 server_error_variant_also_negotiates,
67 server_error_insufficient_storage,
68 server_error_loop_detected,
69 server_error_not_extended = 510,
70 server_error_network_authentication_required
73 const inline std::vector<std::pair<StatusCode, std::string>> &status_codes() noexcept {
74 const static std::vector<std::pair<StatusCode, std::string>> status_codes = {
75 {StatusCode::unknown,
""},
76 {StatusCode::information_continue,
"100 Continue"},
77 {StatusCode::information_switching_protocols,
"101 Switching Protocols"},
78 {StatusCode::information_processing,
"102 Processing"},
79 {StatusCode::success_ok,
"200 OK"},
80 {StatusCode::success_created,
"201 Created"},
81 {StatusCode::success_accepted,
"202 Accepted"},
82 {StatusCode::success_non_authoritative_information,
"203 Non-Authoritative Information"},
83 {StatusCode::success_no_content,
"204 No Content"},
84 {StatusCode::success_reset_content,
"205 Reset Content"},
85 {StatusCode::success_partial_content,
"206 Partial Content"},
86 {StatusCode::success_multi_status,
"207 Multi-Status"},
87 {StatusCode::success_already_reported,
"208 Already Reported"},
88 {StatusCode::success_im_used,
"226 IM Used"},
89 {StatusCode::redirection_multiple_choices,
"300 Multiple Choices"},
90 {StatusCode::redirection_moved_permanently,
"301 Moved Permanently"},
91 {StatusCode::redirection_found,
"302 Found"},
92 {StatusCode::redirection_see_other,
"303 See Other"},
93 {StatusCode::redirection_not_modified,
"304 Not Modified"},
94 {StatusCode::redirection_use_proxy,
"305 Use Proxy"},
95 {StatusCode::redirection_switch_proxy,
"306 Switch Proxy"},
96 {StatusCode::redirection_temporary_redirect,
"307 Temporary Redirect"},
97 {StatusCode::redirection_permanent_redirect,
"308 Permanent Redirect"},
98 {StatusCode::client_error_bad_request,
"400 Bad Request"},
99 {StatusCode::client_error_unauthorized,
"401 Unauthorized"},
100 {StatusCode::client_error_payment_required,
"402 Payment Required"},
101 {StatusCode::client_error_forbidden,
"403 Forbidden"},
102 {StatusCode::client_error_not_found,
"404 Not Found"},
103 {StatusCode::client_error_method_not_allowed,
"405 Method Not Allowed"},
104 {StatusCode::client_error_not_acceptable,
"406 Not Acceptable"},
105 {StatusCode::client_error_proxy_authentication_required,
"407 Proxy Authentication Required"},
106 {StatusCode::client_error_request_timeout,
"408 Request Timeout"},
107 {StatusCode::client_error_conflict,
"409 Conflict"},
108 {StatusCode::client_error_gone,
"410 Gone"},
109 {StatusCode::client_error_length_required,
"411 Length Required"},
110 {StatusCode::client_error_precondition_failed,
"412 Precondition Failed"},
111 {StatusCode::client_error_payload_too_large,
"413 Payload Too Large"},
112 {StatusCode::client_error_uri_too_long,
"414 URI Too Long"},
113 {StatusCode::client_error_unsupported_media_type,
"415 Unsupported Media Type"},
114 {StatusCode::client_error_range_not_satisfiable,
"416 Range Not Satisfiable"},
115 {StatusCode::client_error_expectation_failed,
"417 Expectation Failed"},
116 {StatusCode::client_error_im_a_teapot,
"418 I'm a teapot"},
117 {StatusCode::client_error_misdirection_required,
"421 Misdirected Request"},
118 {StatusCode::client_error_unprocessable_entity,
"422 Unprocessable Entity"},
119 {StatusCode::client_error_locked,
"423 Locked"},
120 {StatusCode::client_error_failed_dependency,
"424 Failed Dependency"},
121 {StatusCode::client_error_upgrade_required,
"426 Upgrade Required"},
122 {StatusCode::client_error_precondition_required,
"428 Precondition Required"},
123 {StatusCode::client_error_too_many_requests,
"429 Too Many Requests"},
124 {StatusCode::client_error_request_header_fields_too_large,
"431 Request Header Fields Too Large"},
125 {StatusCode::client_error_unavailable_for_legal_reasons,
"451 Unavailable For Legal Reasons"},
126 {StatusCode::server_error_internal_server_error,
"500 Internal Server Error"},
127 {StatusCode::server_error_not_implemented,
"501 Not Implemented"},
128 {StatusCode::server_error_bad_gateway,
"502 Bad Gateway"},
129 {StatusCode::server_error_service_unavailable,
"503 Service Unavailable"},
130 {StatusCode::server_error_gateway_timeout,
"504 Gateway Timeout"},
131 {StatusCode::server_error_http_version_not_supported,
"505 HTTP Version Not Supported"},
132 {StatusCode::server_error_variant_also_negotiates,
"506 Variant Also Negotiates"},
133 {StatusCode::server_error_insufficient_storage,
"507 Insufficient Storage"},
134 {StatusCode::server_error_loop_detected,
"508 Loop Detected"},
135 {StatusCode::server_error_not_extended,
"510 Not Extended"},
136 {StatusCode::server_error_network_authentication_required,
"511 Network Authentication Required"}};
140 inline StatusCode status_code(
const std::string &status_code_str) noexcept {
141 for(
auto &status_code : status_codes()) {
142 if(status_code.second == status_code_str)
143 return status_code.first;
145 return StatusCode::unknown;
148 const inline std::string &status_code(StatusCode status_code_enum) noexcept {
149 for(
auto &status_code : status_codes()) {
150 if(status_code.first == status_code_enum)
151 return status_code.second;
153 return status_codes()[0].second;
157 #endif // SIMPLE_WEB_STATUS_CODE_HPP