awful router added by mario-goulart on Tue Jun 25 20:05:05 2013

(use awful)

(enable-sxml #t)

(define (handle-root)
  "this is root")

(define (handle-foo)
  "this is foo")

(define (handle-bar path)
  (string-append "this is " path))

(define (match-baz path)
  (let ((path-parts (string-split path "/")))
    (and (= (length path-parts) 3)
         (cdr path-parts))))

(define (handle-baz part1 part2)
  (sprintf "this is baz: ~a and ~a" part1 part2))

(define (handle-get-form)
  `(form (@ (action "/some-form")
            (method "post"))
         (input (@ (type "text")
                   (name "some-text")))
         (input (@ (type "submit")))))

(define (handle-post-form)
  (with-request-variables (some-text)
    `("You submitted " (i ,some-text))))


(define (dispatcher routes)
  (for-each
   (lambda (route)
     (let ((matcher (car route))
           (handlers (cdr route)))
       (for-each
        (lambda (handler)
          (let ((method (car handler))
                (handler (cadr handler)))
          (define-page matcher
                  (case-lambda
                   (() (handler))
                   ((path) (handler path))
                   (args (apply handler args)))
                  method: (list method 'HEAD))))
        handlers)))
   routes))

(define routes
  `(("/"
     (get ,handle-root))

    ("/foo"
     (get ,handle-foo))

    (,(irregex "/bar/.*")
     (get ,handle-bar))

    (,match-baz
     (get ,handle-baz))

    ("/some-form"
     (get  ,handle-get-form)
     (post ,handle-post-form))
    ))

(dispatcher routes)