aboutsummaryrefslogtreecommitdiff
path: root/weeb/main.scm
diff options
context:
space:
mode:
Diffstat (limited to 'weeb/main.scm')
-rw-r--r--weeb/main.scm31
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)

© 2015 - 2026 Jakob L. Kreuze