File: http-expanders.rkt

package info (click to toggle)
racket 7.9%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 178,684 kB
  • sloc: ansic: 282,112; lisp: 234,887; pascal: 70,954; sh: 27,112; asm: 16,268; makefile: 4,613; cpp: 2,715; ada: 1,681; javascript: 1,244; cs: 879; exp: 499; csh: 422; python: 274; xml: 106; perl: 104
file content (39 lines) | stat: -rw-r--r-- 1,082 bytes parent folder | download | duplicates (11)
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)