// A semantic HTTP error and its status code. export type httperror = !uint; // Checks if an HTTP status code is semantically considered an error, returning // [[httperror]] if so, or otherwise returning the original status code. export fn check(status: uint) (uint | httperror) = { if (status >= 400 && status < 600) { return status: httperror; }; return status; }; // Converts a standard HTTP status code into the reason text typically // associated with this status code (or "Unknown Status" if the status code is // not known to net::http). export fn status_reason(status: uint) const str = { switch (status) { case STATUS_CONTINUE => return "Continue"; case STATUS_SWITCHING_PROTOCOLS => return "Switching Protocols"; case STATUS_OK => return "Continue"; case STATUS_CREATED => return "Continue"; case STATUS_ACCEPTED => return "Accepted"; case STATUS_NONAUTHORITATIVE_INFO => return "Non-Authoritative Information"; case STATUS_NO_CONTENT => return "No Content"; case STATUS_RESET_CONTENT => return "Reset Content"; case STATUS_PARTIAL_CONTENT => return "Partial Content"; case STATUS_MULTIPLE_CHOICES => return "Multiple Choices"; case STATUS_MOVED_PERMANENTLY => return "Moved Permanently"; case STATUS_FOUND => return "Found"; case STATUS_SEE_OTHER => return "See Other"; case STATUS_NOT_MODIFIED => return "Not Modified"; case STATUS_USE_PROXY => return "Use Proxy"; case STATUS_TEMPORARY_REDIRECT => return "Temporary Redirect"; case STATUS_PERMANENT_REDIRECT => return "Permanent Redirect"; case STATUS_BAD_REQUEST => return "Bad Request"; case STATUS_UNAUTHORIZED => return "Unauthorized"; case STATUS_PAYMENT_REQUIRED => return "Payment Required"; case STATUS_FORBIDDEN => return "Forbidden"; case STATUS_NOT_FOUND => return "Not Found"; case STATUS_METHOD_NOT_ALLOWED => return "Method Not Allowed"; case STATUS_NOT_ACCEPTABLE => return "Not Acceptable"; case STATUS_PROXY_AUTH_REQUIRED => return "Proxy Authentication Required"; case STATUS_REQUEST_TIMEOUT => return "Request Timeout"; case STATUS_CONFLICT => return "Conflict"; case STATUS_GONE => return "Gone"; case STATUS_LENGTH_REQUIRED => return "Length Required"; case STATUS_PRECONDITION_FAILED => return "Precondition Failed"; case STATUS_REQUEST_ENTITY_TOO_LARGE => return "Request Entity Too Large"; case STATUS_REQUEST_URI_TOO_LONG => return "Request URI Too Long"; case STATUS_UNSUPPORTED_MEDIA_TYPE => return "Unsupported Media Type"; case STATUS_REQUESTED_RANGE_NOT_SATISFIABLE => return "Requested Range Not Satisfiable"; case STATUS_EXPECTATION_FAILED => return "Expectation Failed"; case STATUS_TEAPOT => return "I'm A Teapot"; case STATUS_MISDIRECTED_REQUEST => return "Misdirected Request"; case STATUS_UNPROCESSABLE_ENTITY => return "Unprocessable Entity"; case STATUS_UPGRADE_REQUIRED => return "Upgrade Required"; case STATUS_INTERNAL_SERVER_ERROR => return "Internal Server Error"; case STATUS_NOT_IMPLEMENTED => return "Not Implemented"; case STATUS_BAD_GATEWAY => return "Bad Gateway"; case STATUS_SERVICE_UNAVAILABLE => return "Service Unavailable"; case STATUS_GATEWAY_TIMEOUT => return "Gateway Timeout"; case STATUS_HTTP_VERSION_NOT_SUPPORTED => return "HTTP Version Not Supported"; case => return "Unknown status"; }; };