-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmain.rkt
More file actions
72 lines (57 loc) · 1.93 KB
/
Copy pathmain.rkt
File metadata and controls
72 lines (57 loc) · 1.93 KB
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#lang racket
(provide set-handler)
(require json
net/http-client)
(define runtime-url (getenv "AWS_LAMBDA_RUNTIME_API"))
(define get-host
(lambda (url)
(car (string-split url ":"))))
(define get-port
(lambda (url)
(string->number (car (cdr (string-split url ":"))))))
(define host (get-host runtime-url))
(define port (get-port runtime-url))
(define make-pairs
(lambda (str)
(let* ([key (car (regexp-match #rx"[A-Za-z-]*:" str))]
[val (string-replace str key "")])
(list (string->symbol
(string-titlecase (string-trim (string-replace key ":" ""))))
(string-trim val)))))
(define map-headers
(lambda (headers)
(make-immutable-hasheq
(map (lambda (bytes) (make-pairs (bytes->string/utf-8 bytes)))
headers))))
(define invocation-response
(lambda (aws-request-id data)
(let-values ([(status headers response-port)
(http-sendrecv
host
(string-append "/2018-06-01/runtime/invocation/"
aws-request-id
"/response")
#:method #"POST"
#:port port
#:data (jsexpr->string data))])
(displayln status))))
(define invocation-error
(lambda (err)
(display err)))
(define next-invocation
(lambda (handler)
(let-values ([(status headers response-port)
(http-sendrecv host "/2018-06-01/runtime/invocation/next"
#:port port)])
(invocation-response
(car
(hash-ref (map-headers headers)
'Lambda-Runtime-Aws-Request-Id))
(handler (read-json response-port) (make-hasheq))))))
(define main
(lambda (handler)
(next-invocation handler)
(main handler)))
(define set-handler
(lambda (handler)
(main handler)))