wstd 0.5.0-draft2

An async standard library for Wasm Components and WASI 0.2
Documentation
use std::fmt::Display;

/// HTTP Status Codes
///
/// See the [Status Code
/// Registry](https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml)
/// for more information
#[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}"),
        }
    }
}