use std::fmt::Display;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u16)]
#[allow(missing_docs)]
#[non_exhaustive]
pub enum StatusCode {
Continue = 100,
SwitchingProtocols = 101,
Ok = 200,
Created = 201,
Accepted = 202,
NonAuthoritativeInformation = 203,
NoContent = 204,
ResetContent = 205,
PartialContent = 206,
MultipleChoices = 300,
MovedPermanently = 301,
Found = 302,
SeeOther = 303,
NotModified = 304,
UseProxy = 305,
TemporaryRedirect = 307,
PermanentRedirect = 308,
BadRequest = 400,
Unauthorized = 401,
PaymentRequired = 402,
Forbidden = 403,
NotFound = 404,
MethodNotAllowed = 405,
NotAcceptable = 406,
ProxyAuthenticationRequired = 407,
RequestTimeout = 408,
Conflict = 409,
Gone = 410,
LengthRequired = 411,
PreconditionFailed = 412,
ContentTooLarge = 413,
URITooLong = 414,
UnsupportedMediaType = 415,
RangeNotSatisfiable = 416,
ExpectationFailed = 417,
MisdirectedRequest = 421,
UnprocessableContent = 422,
UpgradeRequired = 426,
InternalServerError = 500,
NotImplemented = 501,
BadGateway = 502,
ServiceUnavailable = 503,
GatewayTimeout = 504,
HTTPVersionNotSupported = 505,
Other(u16),
}
impl From<u16> for StatusCode {
fn from(input: u16) -> Self {
match input {
100 => Self::Continue,
101 => Self::SwitchingProtocols,
200 => Self::Ok,
201 => Self::Created,
202 => Self::Accepted,
203 => Self::NonAuthoritativeInformation,
204 => Self::NoContent,
205 => Self::ResetContent,
206 => Self::PartialContent,
300 => Self::MultipleChoices,
301 => Self::MovedPermanently,
302 => Self::Found,
303 => Self::SeeOther,
304 => Self::NotModified,
305 => Self::UseProxy,
307 => Self::TemporaryRedirect,
308 => Self::PermanentRedirect,
400 => Self::BadRequest,
401 => Self::Unauthorized,
402 => Self::PaymentRequired,
403 => Self::Forbidden,
404 => Self::NotFound,
405 => Self::MethodNotAllowed,
406 => Self::NotAcceptable,
407 => Self::ProxyAuthenticationRequired,
408 => Self::RequestTimeout,
409 => Self::Conflict,
410 => Self::Gone,
411 => Self::LengthRequired,
412 => Self::PreconditionFailed,
413 => Self::ContentTooLarge,
414 => Self::URITooLong,
415 => Self::UnsupportedMediaType,
416 => Self::RangeNotSatisfiable,
417 => Self::ExpectationFailed,
421 => Self::MisdirectedRequest,
422 => Self::UnprocessableContent,
426 => Self::UpgradeRequired,
500 => Self::InternalServerError,
501 => Self::NotImplemented,
502 => Self::BadGateway,
503 => Self::ServiceUnavailable,
504 => Self::GatewayTimeout,
505 => Self::HTTPVersionNotSupported,
code => Self::Other(code),
}
}
}
impl From<StatusCode> for u16 {
fn from(input: StatusCode) -> Self {
match input {
StatusCode::Continue => 100,
StatusCode::SwitchingProtocols => 101,
StatusCode::Ok => 200,
StatusCode::Created => 201,
StatusCode::Accepted => 202,
StatusCode::NonAuthoritativeInformation => 203,
StatusCode::NoContent => 204,
StatusCode::ResetContent => 205,
StatusCode::PartialContent => 206,
StatusCode::MultipleChoices => 300,
StatusCode::MovedPermanently => 301,
StatusCode::Found => 302,
StatusCode::SeeOther => 303,
StatusCode::NotModified => 304,
StatusCode::UseProxy => 305,
StatusCode::TemporaryRedirect => 307,
StatusCode::PermanentRedirect => 308,
StatusCode::BadRequest => 400,
StatusCode::Unauthorized => 401,
StatusCode::PaymentRequired => 402,
StatusCode::Forbidden => 403,
StatusCode::NotFound => 404,
StatusCode::MethodNotAllowed => 405,
StatusCode::NotAcceptable => 406,
StatusCode::ProxyAuthenticationRequired => 407,
StatusCode::RequestTimeout => 408,
StatusCode::Conflict => 409,
StatusCode::Gone => 410,
StatusCode::LengthRequired => 411,
StatusCode::PreconditionFailed => 412,
StatusCode::ContentTooLarge => 413,
StatusCode::URITooLong => 414,
StatusCode::UnsupportedMediaType => 415,
StatusCode::RangeNotSatisfiable => 416,
StatusCode::ExpectationFailed => 417,
StatusCode::MisdirectedRequest => 421,
StatusCode::UnprocessableContent => 422,
StatusCode::UpgradeRequired => 426,
StatusCode::InternalServerError => 500,
StatusCode::NotImplemented => 501,
StatusCode::BadGateway => 502,
StatusCode::ServiceUnavailable => 503,
StatusCode::GatewayTimeout => 504,
StatusCode::HTTPVersionNotSupported => 505,
StatusCode::Other(status) => status,
}
}
}
impl Display for StatusCode {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
StatusCode::Continue => write!(f, "100 Continue"),
StatusCode::SwitchingProtocols => write!(f, "101 Switching Protocols"),
StatusCode::Ok => write!(f, "200 Ok"),
StatusCode::Created => write!(f, "201 Created"),
StatusCode::Accepted => write!(f, "202 Accepted"),
StatusCode::NonAuthoritativeInformation => write!(f, "203 NonAuthoritativeInformation"),
StatusCode::NoContent => write!(f, "204 NoContent"),
StatusCode::ResetContent => write!(f, "205 ResetContent"),
StatusCode::PartialContent => write!(f, "206 PartialContent"),
StatusCode::MultipleChoices => write!(f, "300 MultipleChoices"),
StatusCode::MovedPermanently => write!(f, "301 MovedPermanently"),
StatusCode::Found => write!(f, "302 Found"),
StatusCode::SeeOther => write!(f, "303 SeeOther"),
StatusCode::NotModified => write!(f, "304 NotModified"),
StatusCode::UseProxy => write!(f, "305 UseProxy"),
StatusCode::TemporaryRedirect => write!(f, "307 TemporaryRedirect"),
StatusCode::PermanentRedirect => write!(f, "308 PermanentRedirect"),
StatusCode::BadRequest => write!(f, "400 BadRequest"),
StatusCode::Unauthorized => write!(f, "401 Unauthorized"),
StatusCode::PaymentRequired => write!(f, "402 PaymentRequired"),
StatusCode::Forbidden => write!(f, "403 Forbidden"),
StatusCode::NotFound => write!(f, "404 NotFound"),
StatusCode::MethodNotAllowed => write!(f, "405 MethodNotAllowed"),
StatusCode::NotAcceptable => write!(f, "406 NotAcceptable"),
StatusCode::ProxyAuthenticationRequired => write!(f, "407 ProxyAuthenticationRequired"),
StatusCode::RequestTimeout => write!(f, "408 RequestTimeout"),
StatusCode::Conflict => write!(f, "409 Conflict"),
StatusCode::Gone => write!(f, "410 Gone"),
StatusCode::LengthRequired => write!(f, "411 LengthRequired"),
StatusCode::PreconditionFailed => write!(f, "412 PreconditionFailed"),
StatusCode::ContentTooLarge => write!(f, "413 ContentTooLarge"),
StatusCode::URITooLong => write!(f, "414 URITooLong"),
StatusCode::UnsupportedMediaType => write!(f, "415 UnsupportedMediaType"),
StatusCode::RangeNotSatisfiable => write!(f, "416 RangeNotSatisfiable"),
StatusCode::ExpectationFailed => write!(f, "417 ExpectationFailed"),
StatusCode::MisdirectedRequest => write!(f, "421 MisdirectedRequest"),
StatusCode::UnprocessableContent => write!(f, "422 UnprocessableContent"),
StatusCode::UpgradeRequired => write!(f, "426 UpgradeRequired"),
StatusCode::InternalServerError => write!(f, "500 InternalServerError"),
StatusCode::NotImplemented => write!(f, "501 NotImplemented"),
StatusCode::BadGateway => write!(f, "502 BadGateway"),
StatusCode::ServiceUnavailable => write!(f, "503 ServiceUnavailable"),
StatusCode::GatewayTimeout => write!(f, "504 GatewayTimeout"),
StatusCode::HTTPVersionNotSupported => write!(f, "505 HTTPVersionNotSupported"),
StatusCode::Other(status) => write!(f, "{status}"),
}
}
}