blob: 7d0f789a1c89bc1b503e12029db24e6a95bcaf64 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
import streams
import bindings/quickjs
import io/promise
import io/request
import js/javascript
import types/url
type
Response* = ref object
fd*: int
body*: Stream
bodyUsed* {.jsget.}: bool
res* {.jsget.}: int
contenttype* {.jsget.}: string
status* {.jsget.}: int
headers* {.jsget.}: Headers
redirect*: Request
url*: URL #TODO should be urllist?
unregisterFun*: proc()
bodyRead*: Promise[string]
proc newResponse*(res: int, request: Request, fd = -1, stream: Stream = nil):
Response =
return Response(
res: res,
url: request.url,
body: stream,
bodyRead: Promise[string](),
fd: fd
)
#TODO: this should be a property of body
proc close*(response: Response) {.jsfunc.} =
response.bodyUsed = true
if response.unregisterFun != nil:
response.unregisterFun()
if response.body != nil:
response.body.close()
proc text*(response: Response): Promise[string] {.jsfunc.} =
return response.bodyRead
proc json(ctx: JSContext, this: Response): Promise[JSValue] {.jsfunc.} =
return this.text().then(proc(s: string): JSValue =
return JS_ParseJSON(ctx, cstring(s), cast[csize_t](s.len),
cstring"<input>"))
proc addResponseModule*(ctx: JSContext) =
ctx.registerType(Response)
|