summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorW. Kosior <koszko@koszko.org>2025-02-11 12:13:45 +0100
committerW. Kosior <koszko@koszko.org>2025-02-11 12:13:45 +0100
commit7cad1d5907705bb7ca3411017a099186aa75ce19 (patch)
treeb2c6b23f5427b56933022e4256a1e6c5934e5e05
parent6995ff9efcf9c3e02a83656dc41dce3934e5cd97 (diff)
downloadcantius-7cad1d5907705bb7ca3411017a099186aa75ce19.tar.gz
cantius-7cad1d5907705bb7ca3411017a099186aa75ce19.zip
Avoid `with-parameters*' which creates a continuation barrier.
-rw-r--r--src/guile/cantius.scm28
1 files changed, 17 insertions, 11 deletions
diff --git a/src/guile/cantius.scm b/src/guile/cantius.scm
index 36aafb7..bbe6c2c 100644
--- a/src/guile/cantius.scm
+++ b/src/guile/cantius.scm
@@ -659,17 +659,23 @@
(apply (endpoint-handler endpoint) request body
(or (and=> path-tail list) '()))))))))))
- (with-parameters* (map car parameters) (map cdr parameters)
- (lambda ()
- (match ((compose list compute-response))
- ((response-body)
- (values (build-response*) response-body))
- ((response response-body)
- (values response response-body))
- (something-else
- (values (build-response* #:headers *%default-headers #:code 500)
- (format #f "Invalid return values from handler:~%~a"
- something-else))))))))
+ (let recurse ((parameters parameters))
+ (match parameters
+
+ (((param . value) . rest)
+ (parameterize ((param value))
+ (recurse rest)))
+
+ (()
+ (match ((compose list compute-response))
+ ((response-body)
+ (values (build-response*) response-body))
+ ((response response-body)
+ (values response response-body))
+ (something-else
+ (values (build-response* #:headers *%default-headers #:code 500)
+ (format #f "Invalid return values from handler:~%~a"
+ something-else)))))))))
(define-public (run-cantius endset . server-args)
(apply run-server (cut handler <> <> endset) server-args))