racket/collects/web-server/dispatch/url-patterns.ss
Jay McCarthy a7126e20a5 dispatching
svn: r13914
2009-03-03 17:26:29 +00:00

56 lines
1.6 KiB
Scheme

#lang scheme
(require web-server/dispatch/coercion
web-server/dispatch/bidi-match)
(define-syntax define-bidi-match-expander/coercions
(syntax-rules ()
[(_ id in-test? in out-test? out)
(begin (define-coercion-match-expander in/m in-test? in)
(define-coercion-match-expander out/m out-test? out)
(define-bidi-match-expander id in/m out/m))]))
; number arg
(define string->number? (make-coerce-safe? string->number))
(define-bidi-match-expander/coercions number-arg
string->number? string->number
number? number->string)
; integer arg
(define (string->integer x)
(define nx (string->number x))
(if (integer? nx)
nx
(error 'string->integer "Not an integer string")))
(define string->integer? (make-coerce-safe? string->integer))
(define-bidi-match-expander/coercions integer-arg
string->integer? string->integer
integer? number->string)
; real arg
(define (string->real x)
(define nx (string->number x))
(if (real? nx)
nx
(error 'string->real "Not an real string")))
(define string->real? (make-coerce-safe? string->real))
(define-bidi-match-expander/coercions real-arg
string->real? string->real
real? number->string)
; string arg
(define-match-expander string->string/m
(syntax-rules ()
[(_ str) (? string? str)]))
(define-bidi-match-expander string-arg string->string/m string->string/m)
; symbol arg
(define-bidi-match-expander/coercions symbol-arg
string? string->symbol
symbol? symbol->string)
(provide number-arg
integer-arg
real-arg
string-arg
symbol-arg)