1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
#lang racket/base
(require racket/match
net/url
web-server/http)
(define-match-expander url/path
(syntax-rules ()
[(_ path-pat)
; url = scheme, user, host, port, absolute?, path, query, fragment
(struct url (_ _ _ _ _ path-pat _ _))]))
(define-match-expander url/paths
(syntax-rules ()
[(_ path-pat ...)
(url/path (app (lambda (ps) (map path/param-path ps))
(list path-pat ...)))]))
(define (method-downcase x)
(cond
[(string? x)
(string-downcase x)]
[(bytes? x)
(method-downcase (bytes->string/utf-8 x))]
[else
x]))
(define-match-expander request/url
(syntax-rules ()
[(_ url-pat)
; req = method, url, headers, bindings, post-data, host-ip, host-port, client-ip
(request/url (or #f "get") url-pat)]
[(_ method url-pat)
; req = method, url, headers, bindings, post-data, host-ip, host-port, client-ip
(struct request ((app method-downcase method)
url-pat _ _ _ _ _ _))]))
(provide url/path
url/paths
request/url)
|