linda 0.2.0

A multi-threaded HTTP/1.1 server
Documentation
use std::collections::HashMap;
use std::fmt;

#[derive(Hash, Eq, PartialEq, Clone)]
#[allow(non_camel_case_types)]
pub(super) enum StatusCode {
    CONTINUE,
    SWITCHING_PROTOCOLS,
    OK,
    CREATED,
    ACCEPTED,
    NON_AUTHORITATIVE_INFORMATION,
    NO_CONTENT,
    RESET_CONTENT,
    PARTIAL_CONTENT,
    MULTIPLE_CHOICES,
    MOVED_PERMANENTLY,
    FOUND,
    SEE_OTHER,
    NOT_MODIFIED,
    USE_PROXY,
    TEMPORARY_REDIRECT,
    BAD_REQUEST,
    UNAUTHORIZED,
    PAYMENT_REQUIRED,
    FORBIDDEN,
    NOT_FOUND,
    METHOD_NOT_ALLOWED,
    NOT_ACCEPTABLE,
    PROXY_AUTHENTICATION_REQUIRED,
    REQUEST_TIME_OUT,
    CONFLICT,
    GONE,
    LENGTH_REQUIRED,
    PRECONDITION_FAILED,
    REQUEST_ENTITY_TOO_LARGE,
    REQUEST_URI_TOO_LARGE,
    UNSUPPORTED_MEDIA_TYPE,
    REQUEST_RANGE_NOT_SATISFIABLE,
    EXPECTATION_FAILED,
    INTERNAL_SERVER_ERROR,
    NOT_IMPLEMENTED,
    BAD_GATEWAY,
    SERVICE_UNAVAILABLE,
    GATEWAY_TIME_OUT,
    HTTP_VERSION_NOT_SUPPORTED,
}

impl Default for StatusCode {
    fn default() -> Self {
        StatusCode::OK
    }
}

impl fmt::Display for StatusCode {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        let codes: HashMap<StatusCode, i32> = [
            (StatusCode::CONTINUE, 100),
            (StatusCode::SWITCHING_PROTOCOLS, 101),
            (StatusCode::OK, 200),
            (StatusCode::CREATED, 201),
            (StatusCode::ACCEPTED, 202),
            (StatusCode::NON_AUTHORITATIVE_INFORMATION, 203),
            (StatusCode::NO_CONTENT, 204),
            (StatusCode::RESET_CONTENT, 205),
            (StatusCode::PARTIAL_CONTENT, 206),
            (StatusCode::MULTIPLE_CHOICES, 300),
            (StatusCode::MOVED_PERMANENTLY, 301),
            (StatusCode::FOUND, 302),
            (StatusCode::SEE_OTHER, 303),
            (StatusCode::NOT_MODIFIED, 304),
            (StatusCode::USE_PROXY, 305),
            (StatusCode::TEMPORARY_REDIRECT, 307),
            (StatusCode::BAD_REQUEST, 400),
            (StatusCode::UNAUTHORIZED, 401),
            (StatusCode::PAYMENT_REQUIRED, 402),
            (StatusCode::FORBIDDEN, 403),
            (StatusCode::NOT_FOUND, 404),
            (StatusCode::METHOD_NOT_ALLOWED, 405),
            (StatusCode::NOT_ACCEPTABLE, 406),
            (StatusCode::PROXY_AUTHENTICATION_REQUIRED, 407),
            (StatusCode::REQUEST_TIME_OUT, 408),
            (StatusCode::CONFLICT, 409),
            (StatusCode::GONE, 410),
            (StatusCode::LENGTH_REQUIRED, 411),
            (StatusCode::PRECONDITION_FAILED, 412),
            (StatusCode::REQUEST_ENTITY_TOO_LARGE, 413),
            (StatusCode::REQUEST_URI_TOO_LARGE, 414),
            (StatusCode::UNSUPPORTED_MEDIA_TYPE, 415),
            (StatusCode::REQUEST_RANGE_NOT_SATISFIABLE, 416),
            (StatusCode::EXPECTATION_FAILED, 417),
            (StatusCode::INTERNAL_SERVER_ERROR, 500),
            (StatusCode::NOT_IMPLEMENTED, 501),
            (StatusCode::BAD_GATEWAY, 502),
            (StatusCode::SERVICE_UNAVAILABLE, 503),
            (StatusCode::GATEWAY_TIME_OUT, 504),
            (StatusCode::HTTP_VERSION_NOT_SUPPORTED, 505),
        ]
        .iter()
        .cloned()
        .collect();
        write!(f, "{}", codes.get(self).unwrap())
    }
}