RDFS
The Rice Comp413 2017 class' continuation on the work of the 2016 RDFS.
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Pages
status_code.h
1 #ifndef SIMPLE_WEB_STATUS_CODE_HPP
2 #define SIMPLE_WEB_STATUS_CODE_HPP
3 
4 #include <string>
5 #include <vector>
6 
7 namespace SimpleWeb {
8  enum class StatusCode {
9  unknown = 0,
10  information_continue = 100,
11  information_switching_protocols,
12  information_processing,
13  success_ok = 200,
14  success_created,
15  success_accepted,
16  success_non_authoritative_information,
17  success_no_content,
18  success_reset_content,
19  success_partial_content,
20  success_multi_status,
21  success_already_reported,
22  success_im_used = 226,
23  redirection_multiple_choices = 300,
24  redirection_moved_permanently,
25  redirection_found,
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,
42  client_error_gone,
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,
53  client_error_locked,
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
71  };
72 
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"}};
137  return status_codes;
138  }
139 
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;
144  }
145  return StatusCode::unknown;
146  }
147 
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;
152  }
153  return status_codes()[0].second;
154  }
155 } // namespace SimpleWeb
156 
157 #endif // SIMPLE_WEB_STATUS_CODE_HPP