I'm working on a macro to allow the following:

(routes
 ("/foo" foo-handler #:method put)
 ("/bar" bar-handler #:methods (put update))
 ("/baz" baz-handler))

The idea is that you could restrict a route based on the HTTP method either 
for one method using #:method or for a list of methods using #:methods. I 
tried using some ideas from the following examples:

https://docs.racket-lang.org/syntax/Optional_Keyword_Arguments.html

https://docs.racket-lang.org/syntax/More_Keyword_Arguments.html

The attempt below does not work, and from my debugging I think it's 
probably the wrong approach. If there are examples of this sort of thing, 
I'd love to see them.

Thanks,
Brian Adkins

(define-syntax (routes stx)
  (syntax-parse stx
    [ (routes (route:string
               handler:id
               (~alt (~optional (~or* (~seq #:methods (methods:expr ...))
                                      (~seq #:method method:expr))
                                #:name "#:method, or #:methods option")
                     (~optional (~seq #:when guard:expr)
                                #:name "#:when option"))
               ...)
              ...)
      (with-syntax ([ name  (format-id stx "axio-routes") ])
        #'(define name (list (list route handler 'method (list 'methods 
...)) ...)))]))

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/8d801f42-fc63-47fb-ab0a-80a1fc905d4d%40googlegroups.com.

Reply via email to