diff options
Diffstat (limited to 'weeb/main.scm')
| -rw-r--r-- | weeb/main.scm | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/weeb/main.scm b/weeb/main.scm index fa4e9fc..7487f19 100644 --- a/weeb/main.scm +++ b/weeb/main.scm @@ -21,12 +21,15 @@ #:use-module (ice-9 regex) #:use-module (srfi srfi-1) #:use-module (srfi srfi-11) ;; Temporary, probably + #:use-module (srfi srfi-26) + #:use-module (system repl error-handling) #:use-module (weeb fcgi) #:use-module (weeb request) #:use-module (weeb response) #:use-module (weeb router) #:use-module (weeb struct) - #:export (weeb main)) + #:use-module (weeb sxml) + #:export (run-server)) (define status-codes '((100 . "Continue") @@ -125,21 +128,21 @@ (uri (getenv "REQUEST_URI"))) (make-struct <request> method uri '() headers (fcgi-read)))) -(define (show-headers request) - (with-accessors (request headers) - (format #f "~a" headers))) +(define (handle-errors thunk) + (catch #t + (lambda () + (with-exception-handler + (lambda (exn) + (let ((captured-stack (make-stack #t))) + (throw 'custom-error-key exn captured-stack))) + thunk + #:unwind? #f)) + (lambda (key exn captured-stack) + (let ((stack-trace (call-with-output-string (cut display-backtrace captured-stack <>)))) + (list 500 stack-trace))))) -(define (show-message request message) - (format #f "~a" message)) - -(define-router router - ("/headers" (GET) show-headers) - ("/echo/:message:" (GET) show-message)) - -(define (run-server) +(define (run-server router) (while (zero? (fcgi-accept)) (let* ((request (receive-request)) (response (iter-routes request router))) (write-response (any->response response))))) - -(run-server) |