libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
httpstatus.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_HTTP
13#include <promeki/namespace.h>
14#include <promeki/enum.h>
15#include <promeki/string.h>
16
17PROMEKI_NAMESPACE_BEGIN
18
48class HttpStatus : public TypedEnum<HttpStatus> {
49 public:
50 PROMEKI_REGISTER_ENUM_TYPE(
51 "HttpStatus", 200,
52 // 1xx Informational
53 {"Continue", 100}, {"SwitchingProtocols", 101}, {"Processing", 102}, {"EarlyHints", 103},
54
55 // 2xx Success
56 {"Ok", 200}, {"Created", 201}, {"Accepted", 202}, {"NonAuthoritativeInformation", 203},
57 {"NoContent", 204}, {"ResetContent", 205}, {"PartialContent", 206},
58
59 // 3xx Redirection
60 {"MultipleChoices", 300}, {"MovedPermanently", 301}, {"Found", 302}, {"SeeOther", 303},
61 {"NotModified", 304}, {"TemporaryRedirect", 307}, {"PermanentRedirect", 308},
62
63 // 4xx Client errors
64 {"BadRequest", 400}, {"Unauthorized", 401}, {"PaymentRequired", 402}, {"Forbidden", 403},
65 {"NotFound", 404}, {"MethodNotAllowed", 405}, {"NotAcceptable", 406},
66 {"ProxyAuthenticationRequired", 407}, {"RequestTimeout", 408}, {"Conflict", 409}, {"Gone", 410},
67 {"LengthRequired", 411}, {"PreconditionFailed", 412}, {"PayloadTooLarge", 413},
68 {"UriTooLong", 414}, {"UnsupportedMediaType", 415}, {"RangeNotSatisfiable", 416},
69 {"ExpectationFailed", 417}, {"ImATeapot", 418}, {"MisdirectedRequest", 421},
70 {"UnprocessableEntity", 422}, {"Locked", 423}, {"FailedDependency", 424}, {"TooEarly", 425},
71 {"UpgradeRequired", 426}, {"PreconditionRequired", 428}, {"TooManyRequests", 429},
72 {"RequestHeaderFieldsTooLarge", 431}, {"UnavailableForLegalReasons", 451},
73
74 // 5xx Server errors
75 {"InternalServerError", 500}, {"NotImplemented", 501}, {"BadGateway", 502},
76 {"ServiceUnavailable", 503}, {"GatewayTimeout", 504}, {"HttpVersionNotSupported", 505},
77 {"VariantAlsoNegotiates", 506}, {"InsufficientStorage", 507}, {"LoopDetected", 508},
78 {"NotExtended", 510}, {"NetworkAuthenticationRequired", 511});
79
80 using TypedEnum<HttpStatus>::TypedEnum;
81
82 // 1xx
83 static const HttpStatus Continue;
84 static const HttpStatus SwitchingProtocols;
85 static const HttpStatus Processing;
86 static const HttpStatus EarlyHints;
87
88 // 2xx
89 static const HttpStatus Ok;
90 static const HttpStatus Created;
91 static const HttpStatus Accepted;
92 static const HttpStatus NonAuthoritativeInformation;
93 static const HttpStatus NoContent;
94 static const HttpStatus ResetContent;
95 static const HttpStatus PartialContent;
96
97 // 3xx
98 static const HttpStatus MultipleChoices;
99 static const HttpStatus MovedPermanently;
100 static const HttpStatus Found;
101 static const HttpStatus SeeOther;
102 static const HttpStatus NotModified;
103 static const HttpStatus TemporaryRedirect;
104 static const HttpStatus PermanentRedirect;
105
106 // 4xx
107 static const HttpStatus BadRequest;
108 static const HttpStatus Unauthorized;
109 static const HttpStatus PaymentRequired;
110 static const HttpStatus Forbidden;
111 static const HttpStatus NotFound;
112 static const HttpStatus MethodNotAllowed;
113 static const HttpStatus NotAcceptable;
114 static const HttpStatus ProxyAuthenticationRequired;
115 static const HttpStatus RequestTimeout;
116 static const HttpStatus Conflict;
117 static const HttpStatus Gone;
118 static const HttpStatus LengthRequired;
119 static const HttpStatus PreconditionFailed;
120 static const HttpStatus PayloadTooLarge;
121 static const HttpStatus UriTooLong;
122 static const HttpStatus UnsupportedMediaType;
123 static const HttpStatus RangeNotSatisfiable;
124 static const HttpStatus ExpectationFailed;
125 static const HttpStatus ImATeapot;
126 static const HttpStatus MisdirectedRequest;
127 static const HttpStatus UnprocessableEntity;
128 static const HttpStatus Locked;
129 static const HttpStatus FailedDependency;
130 static const HttpStatus TooEarly;
131 static const HttpStatus UpgradeRequired;
132 static const HttpStatus PreconditionRequired;
133 static const HttpStatus TooManyRequests;
134 static const HttpStatus RequestHeaderFieldsTooLarge;
135 static const HttpStatus UnavailableForLegalReasons;
136
137 // 5xx
138 static const HttpStatus InternalServerError;
139 static const HttpStatus NotImplemented;
140 static const HttpStatus BadGateway;
141 static const HttpStatus ServiceUnavailable;
142 static const HttpStatus GatewayTimeout;
143 static const HttpStatus HttpVersionNotSupported;
144 static const HttpStatus VariantAlsoNegotiates;
145 static const HttpStatus InsufficientStorage;
146 static const HttpStatus LoopDetected;
147 static const HttpStatus NotExtended;
148 static const HttpStatus NetworkAuthenticationRequired;
149
160 String reasonPhrase() const;
161
163 bool isInformational() const { return value() >= 100 && value() < 200; }
165 bool isSuccess() const { return value() >= 200 && value() < 300; }
167 bool isRedirect() const { return value() >= 300 && value() < 400; }
169 bool isClientError() const { return value() >= 400 && value() < 500; }
171 bool isServerError() const { return value() >= 500 && value() < 600; }
173 bool isError() const { return isClientError() || isServerError(); }
174};
175
176inline const HttpStatus HttpStatus::Continue{100};
177inline const HttpStatus HttpStatus::SwitchingProtocols{101};
178inline const HttpStatus HttpStatus::Processing{102};
179inline const HttpStatus HttpStatus::EarlyHints{103};
180inline const HttpStatus HttpStatus::Ok{200};
181inline const HttpStatus HttpStatus::Created{201};
182inline const HttpStatus HttpStatus::Accepted{202};
183inline const HttpStatus HttpStatus::NonAuthoritativeInformation{203};
184inline const HttpStatus HttpStatus::NoContent{204};
185inline const HttpStatus HttpStatus::ResetContent{205};
186inline const HttpStatus HttpStatus::PartialContent{206};
187inline const HttpStatus HttpStatus::MultipleChoices{300};
188inline const HttpStatus HttpStatus::MovedPermanently{301};
189inline const HttpStatus HttpStatus::Found{302};
190inline const HttpStatus HttpStatus::SeeOther{303};
191inline const HttpStatus HttpStatus::NotModified{304};
192inline const HttpStatus HttpStatus::TemporaryRedirect{307};
193inline const HttpStatus HttpStatus::PermanentRedirect{308};
194inline const HttpStatus HttpStatus::BadRequest{400};
195inline const HttpStatus HttpStatus::Unauthorized{401};
196inline const HttpStatus HttpStatus::PaymentRequired{402};
197inline const HttpStatus HttpStatus::Forbidden{403};
198inline const HttpStatus HttpStatus::NotFound{404};
199inline const HttpStatus HttpStatus::MethodNotAllowed{405};
200inline const HttpStatus HttpStatus::NotAcceptable{406};
201inline const HttpStatus HttpStatus::ProxyAuthenticationRequired{407};
202inline const HttpStatus HttpStatus::RequestTimeout{408};
203inline const HttpStatus HttpStatus::Conflict{409};
204inline const HttpStatus HttpStatus::Gone{410};
205inline const HttpStatus HttpStatus::LengthRequired{411};
206inline const HttpStatus HttpStatus::PreconditionFailed{412};
207inline const HttpStatus HttpStatus::PayloadTooLarge{413};
208inline const HttpStatus HttpStatus::UriTooLong{414};
209inline const HttpStatus HttpStatus::UnsupportedMediaType{415};
210inline const HttpStatus HttpStatus::RangeNotSatisfiable{416};
211inline const HttpStatus HttpStatus::ExpectationFailed{417};
212inline const HttpStatus HttpStatus::ImATeapot{418};
213inline const HttpStatus HttpStatus::MisdirectedRequest{421};
214inline const HttpStatus HttpStatus::UnprocessableEntity{422};
215inline const HttpStatus HttpStatus::Locked{423};
216inline const HttpStatus HttpStatus::FailedDependency{424};
217inline const HttpStatus HttpStatus::TooEarly{425};
218inline const HttpStatus HttpStatus::UpgradeRequired{426};
219inline const HttpStatus HttpStatus::PreconditionRequired{428};
220inline const HttpStatus HttpStatus::TooManyRequests{429};
221inline const HttpStatus HttpStatus::RequestHeaderFieldsTooLarge{431};
222inline const HttpStatus HttpStatus::UnavailableForLegalReasons{451};
223inline const HttpStatus HttpStatus::InternalServerError{500};
224inline const HttpStatus HttpStatus::NotImplemented{501};
225inline const HttpStatus HttpStatus::BadGateway{502};
226inline const HttpStatus HttpStatus::ServiceUnavailable{503};
227inline const HttpStatus HttpStatus::GatewayTimeout{504};
228inline const HttpStatus HttpStatus::HttpVersionNotSupported{505};
229inline const HttpStatus HttpStatus::VariantAlsoNegotiates{506};
230inline const HttpStatus HttpStatus::InsufficientStorage{507};
231inline const HttpStatus HttpStatus::LoopDetected{508};
232inline const HttpStatus HttpStatus::NotExtended{510};
233inline const HttpStatus HttpStatus::NetworkAuthenticationRequired{511};
234
235PROMEKI_NAMESPACE_END
236
237#endif // PROMEKI_ENABLE_HTTP