diff options
author | hlaaf <hlaaftana@users.noreply.github.com> | 2018-06-08 23:34:19 +0300 |
---|---|---|
committer | Dominik Picheta <dominikpicheta@googlemail.com> | 2018-06-08 21:34:19 +0100 |
commit | c2aec1b6c19af8ee24b9da2bedb67836064199a0 (patch) | |
tree | 26fdf0c608750d93473e00f1700f446165d2aaea | |
parent | caaaa8731a55f18f9150ae171afe5bc5956a7ea1 (diff) | |
download | Nim-c2aec1b6c19af8ee24b9da2bedb67836064199a0.tar.gz |
Change parseEnum to something faster for method parsing in asynchttpserver (#7682)
* Add faster method parsing to asynchttpserver * Make it readable * Align case statement
-rw-r--r-- | lib/pure/asynchttpserver.nim | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/lib/pure/asynchttpserver.nim b/lib/pure/asynchttpserver.nim index fe5a835d7..d27c2fb9c 100644 --- a/lib/pure/asynchttpserver.nim +++ b/lib/pure/asynchttpserver.nim @@ -129,6 +129,20 @@ proc parseProtocol(protocol: string): tuple[orig: string, major, minor: int] = proc sendStatus(client: AsyncSocket, status: string): Future[void] = client.send("HTTP/1.1 " & status & "\c\L\c\L") +proc parseUppercaseMethod(name: string): HttpMethod = + result = + case name + of "GET": HttpGet + of "POST": HttpPost + of "HEAD": HttpHead + of "PUT": HttpPut + of "DELETE": HttpDelete + of "PATCH": HttpPatch + of "OPTIONS": HttpOptions + of "CONNECT": HttpConnect + of "TRACE": HttpTrace + else: raise newException(ValueError, "Invalid HTTP method " & name) + proc processRequest(server: AsyncHttpServer, req: FutureVar[Request], client: AsyncSocket, address: string, lineFut: FutureVar[string], @@ -172,8 +186,7 @@ proc processRequest(server: AsyncHttpServer, req: FutureVar[Request], case i of 0: try: - # TODO: this is likely slow. - request.reqMethod = parseEnum[HttpMethod]("http" & linePart) + request.reqMethod = parseUppercaseMethod(linePart) except ValueError: asyncCheck request.respondError(Http400) return |