mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 01:14:41 +00:00
Use distinct range for HttpCode as suggested by @nigredo-tori.
This commit is contained in:
@@ -93,12 +93,13 @@ type
|
||||
headers*: HttpHeaders
|
||||
body*: string
|
||||
|
||||
proc code*(response: Response): HttpCode {.raises: [ValueError].} =
|
||||
proc code*(response: Response): HttpCode
|
||||
{.raises: [ValueError, OverflowError].} =
|
||||
## Retrieves the specified response's ``HttpCode``.
|
||||
##
|
||||
## Raises a ``ValueError`` if the response's ``status`` does not have a
|
||||
## corresponding ``HttpCode``.
|
||||
return parseEnum[HttpCode](response.status)
|
||||
return response.status[0 .. 2].parseInt.HttpCode
|
||||
|
||||
type
|
||||
Proxy* = ref object
|
||||
|
||||
@@ -18,54 +18,7 @@ type
|
||||
|
||||
HttpHeaderValues* = distinct seq[string]
|
||||
|
||||
HttpCode* = enum
|
||||
Http100 = "100 Continue",
|
||||
Http101 = "101 Switching Protocols",
|
||||
Http200 = "200 OK",
|
||||
Http201 = "201 Created",
|
||||
Http202 = "202 Accepted",
|
||||
Http203 = "203 Non-Authoritative Information",
|
||||
Http204 = "204 No Content",
|
||||
Http205 = "205 Reset Content",
|
||||
Http206 = "206 Partial Content",
|
||||
Http300 = "300 Multiple Choices",
|
||||
Http301 = "301 Moved Permanently",
|
||||
Http302 = "302 Found",
|
||||
Http303 = "303 See Other",
|
||||
Http304 = "304 Not Modified",
|
||||
Http305 = "305 Use Proxy",
|
||||
Http307 = "307 Temporary Redirect",
|
||||
Http400 = "400 Bad Request",
|
||||
Http401 = "401 Unauthorized",
|
||||
Http403 = "403 Forbidden",
|
||||
Http404 = "404 Not Found",
|
||||
Http405 = "405 Method Not Allowed",
|
||||
Http406 = "406 Not Acceptable",
|
||||
Http407 = "407 Proxy Authentication Required",
|
||||
Http408 = "408 Request Timeout",
|
||||
Http409 = "409 Conflict",
|
||||
Http410 = "410 Gone",
|
||||
Http411 = "411 Length Required",
|
||||
Http412 = "412 Precondition Failed",
|
||||
Http413 = "413 Request Entity Too Large",
|
||||
Http414 = "414 Request-URI Too Long",
|
||||
Http415 = "415 Unsupported Media Type",
|
||||
Http416 = "416 Requested Range Not Satisfiable",
|
||||
Http417 = "417 Expectation Failed",
|
||||
Http418 = "418 I'm a teapot",
|
||||
Http421 = "421 Misdirected Request",
|
||||
Http422 = "422 Unprocessable Entity",
|
||||
Http426 = "426 Upgrade Required",
|
||||
Http428 = "428 Precondition Required",
|
||||
Http429 = "429 Too Many Requests",
|
||||
Http431 = "431 Request Header Fields Too Large",
|
||||
Http451 = "451 Unavailable For Legal Reasons",
|
||||
Http500 = "500 Internal Server Error",
|
||||
Http501 = "501 Not Implemented",
|
||||
Http502 = "502 Bad Gateway",
|
||||
Http503 = "503 Service Unavailable",
|
||||
Http504 = "504 Gateway Timeout",
|
||||
Http505 = "505 HTTP Version Not Supported"
|
||||
HttpCode* = distinct range[100 .. 599]
|
||||
|
||||
HttpVersion* = enum
|
||||
HttpVer11,
|
||||
@@ -93,6 +46,56 @@ type
|
||||
httpPut: HttpPut, httpDelete: HttpDelete, httpTrace: HttpTrace,
|
||||
httpOptions: HttpOptions, httpConnect: HttpConnect].}
|
||||
|
||||
|
||||
const
|
||||
Http100* = HttpCode(100)
|
||||
Http101* = HttpCode(101)
|
||||
Http200* = HttpCode(200)
|
||||
Http201* = HttpCode(201)
|
||||
Http202* = HttpCode(202)
|
||||
Http203* = HttpCode(203)
|
||||
Http204* = HttpCode(204)
|
||||
Http205* = HttpCode(205)
|
||||
Http206* = HttpCode(206)
|
||||
Http300* = HttpCode(300)
|
||||
Http301* = HttpCode(301)
|
||||
Http302* = HttpCode(302)
|
||||
Http303* = HttpCode(303)
|
||||
Http304* = HttpCode(304)
|
||||
Http305* = HttpCode(305)
|
||||
Http307* = HttpCode(307)
|
||||
Http400* = HttpCode(400)
|
||||
Http401* = HttpCode(401)
|
||||
Http403* = HttpCode(403)
|
||||
Http404* = HttpCode(404)
|
||||
Http405* = HttpCode(405)
|
||||
Http406* = HttpCode(406)
|
||||
Http407* = HttpCode(407)
|
||||
Http408* = HttpCode(408)
|
||||
Http409* = HttpCode(409)
|
||||
Http410* = HttpCode(410)
|
||||
Http411* = HttpCode(411)
|
||||
Http412* = HttpCode(412)
|
||||
Http413* = HttpCode(413)
|
||||
Http414* = HttpCode(414)
|
||||
Http415* = HttpCode(415)
|
||||
Http416* = HttpCode(416)
|
||||
Http417* = HttpCode(417)
|
||||
Http418* = HttpCode(418)
|
||||
Http421* = HttpCode(421)
|
||||
Http422* = HttpCode(422)
|
||||
Http426* = HttpCode(426)
|
||||
Http428* = HttpCode(428)
|
||||
Http429* = HttpCode(429)
|
||||
Http431* = HttpCode(431)
|
||||
Http451* = HttpCode(451)
|
||||
Http500* = HttpCode(500)
|
||||
Http501* = HttpCode(501)
|
||||
Http502* = HttpCode(502)
|
||||
Http503* = HttpCode(503)
|
||||
Http504* = HttpCode(504)
|
||||
Http505* = HttpCode(505)
|
||||
|
||||
const headerLimit* = 10_000
|
||||
|
||||
proc newHttpHeaders*(): HttpHeaders =
|
||||
@@ -213,24 +216,83 @@ proc `==`*(protocol: tuple[orig: string, major, minor: int],
|
||||
proc contains*(methods: set[HttpMethod], x: string): bool =
|
||||
return parseEnum[HttpMethod](x) in methods
|
||||
|
||||
proc status*(code: HttpCode): string =
|
||||
## Converts the specified ``HttpCode`` into a HTTP status.
|
||||
##
|
||||
## For example:
|
||||
##
|
||||
## .. code-block:: nim
|
||||
## doAssert(Http404.status == "404 Not Found")
|
||||
case code.int
|
||||
of 100: "100 Continue"
|
||||
of 101: "101 Switching Protocols"
|
||||
of 200: "200 OK"
|
||||
of 201: "201 Created"
|
||||
of 202: "202 Accepted"
|
||||
of 203: "203 Non-Authoritative Information"
|
||||
of 204: "204 No Content"
|
||||
of 205: "205 Reset Content"
|
||||
of 206: "206 Partial Content"
|
||||
of 300: "300 Multiple Choices"
|
||||
of 301: "301 Moved Permanently"
|
||||
of 302: "302 Found"
|
||||
of 303: "303 See Other"
|
||||
of 304: "304 Not Modified"
|
||||
of 305: "305 Use Proxy"
|
||||
of 307: "307 Temporary Redirect"
|
||||
of 400: "400 Bad Request"
|
||||
of 401: "401 Unauthorized"
|
||||
of 403: "403 Forbidden"
|
||||
of 404: "404 Not Found"
|
||||
of 405: "405 Method Not Allowed"
|
||||
of 406: "406 Not Acceptable"
|
||||
of 407: "407 Proxy Authentication Required"
|
||||
of 408: "408 Request Timeout"
|
||||
of 409: "409 Conflict"
|
||||
of 410: "410 Gone"
|
||||
of 411: "411 Length Required"
|
||||
of 412: "412 Precondition Failed"
|
||||
of 413: "413 Request Entity Too Large"
|
||||
of 414: "414 Request-URI Too Long"
|
||||
of 415: "415 Unsupported Media Type"
|
||||
of 416: "416 Requested Range Not Satisfiable"
|
||||
of 417: "417 Expectation Failed"
|
||||
of 418: "418 I'm a teapot"
|
||||
of 421: "421 Misdirected Request"
|
||||
of 422: "422 Unprocessable Entity"
|
||||
of 426: "426 Upgrade Required"
|
||||
of 428: "428 Precondition Required"
|
||||
of 429: "429 Too Many Requests"
|
||||
of 431: "431 Request Header Fields Too Large"
|
||||
of 451: "451 Unavailable For Legal Reasons"
|
||||
of 500: "500 Internal Server Error"
|
||||
of 501: "501 Not Implemented"
|
||||
of 502: "502 Bad Gateway"
|
||||
of 503: "503 Service Unavailable"
|
||||
of 504: "504 Gateway Timeout"
|
||||
of 505: "505 HTTP Version Not Supported"
|
||||
else: $(int(code))
|
||||
|
||||
proc `==`*(a, b: HttpCode): bool {.borrow.}
|
||||
|
||||
proc `==`*(rawCode: string, code: HttpCode): bool =
|
||||
return rawCode.toLower() == ($code).toLower()
|
||||
return rawCode.toLower() == code.status.toLower()
|
||||
|
||||
proc is2xx*(code: HttpCode): bool =
|
||||
## Determines whether ``code`` is a 2xx HTTP status code.
|
||||
return ($code).startsWith("2")
|
||||
return code.int in {200 .. 299}
|
||||
|
||||
proc is3xx*(code: HttpCode): bool =
|
||||
## Determines whether ``code`` is a 3xx HTTP status code.
|
||||
return ($code).startsWith("3")
|
||||
return code.int in {300 .. 399}
|
||||
|
||||
proc is4xx*(code: HttpCode): bool =
|
||||
## Determines whether ``code`` is a 4xx HTTP status code.
|
||||
return ($code).startsWith("4")
|
||||
return code.int in {400 .. 499}
|
||||
|
||||
proc is5xx*(code: HttpCode): bool =
|
||||
## Determines whether ``code`` is a 5xx HTTP status code.
|
||||
return ($code).startsWith("5")
|
||||
return code.int in {500 .. 599}
|
||||
|
||||
when isMainModule:
|
||||
var test = newHttpHeaders()
|
||||
|
||||
@@ -65,6 +65,9 @@ that have tuple name:
|
||||
|
||||
- ``AsyncHttpClient.headers`` type is now ``HttpHeaders``.
|
||||
|
||||
- The `$` operator for ``HttpCode`` no longer exists, use the ``status``
|
||||
procedure to get the code's status message.
|
||||
|
||||
Library Additions
|
||||
-----------------
|
||||
|
||||
|
||||
Reference in New Issue
Block a user