diff options
author | Hugo Hörnquist <hugo@hornquist.se> | 2019-05-22 23:11:06 +0200 |
---|---|---|
committer | Hugo Hörnquist <hugo@hornquist.se> | 2019-05-22 23:11:06 +0200 |
commit | bf1c66ffd8686f9fb78210c002e21cfa27a33504 (patch) | |
tree | 995be98acf818d07091ade4ce7fdf6e8af4ccf25 /module/server/macro.scm | |
parent | Large work on server software. (diff) | |
download | calp-bf1c66ffd8686f9fb78210c002e21cfa27a33504.tar.gz calp-bf1c66ffd8686f9fb78210c002e21cfa27a33504.tar.xz |
Server add POST body parameters, and state forwarding.
Diffstat (limited to '')
-rw-r--r-- | module/server/macro.scm | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/module/server/macro.scm b/module/server/macro.scm index 951e009d..f920a663 100644 --- a/module/server/macro.scm +++ b/module/server/macro.scm @@ -51,7 +51,8 @@ (cdr (iota (1+ (length intersect))))))))))) (define-macro (make-routes . routes) - `(lambda (request body) + + `(lambda (request body . state) (let ((r:method (request-method request)) (r:uri (request-uri request)) (r:version (request-version request)) @@ -65,9 +66,20 @@ (r:path (uri-path r:uri)) (r:query (uri-query r:uri)) (r:fragment (uri-fragment r:uri))) - (call/ec (lambda (return) - (apply - (cond ,@(map generate-case routes) - (else (lambda* _ (return (build-response #:code 404) - "404 Not Fonud")))) - (parse-query r:query)))))))) + + + (call-with-values + (lambda () + (call/ec (lambda (return) + (apply + (cond ,@(map generate-case routes) + (else (lambda* _ (return (build-response #:code 404) + "404 Not Fonud")))) + (append + (parse-query r:query) + + (when (memv 'application/x-www-form-urlencoded + (or (assoc-ref r:headers 'content-type) '())) + (parse-query (uri-decode (bytevector->string body "UTF-8"))))))))) + (lambda (a b . new-state) + (values a b (if (null? new-state) state (car new-state))))))))) |