(define-syntax define-handler (ir-macro-transformer (lambda (x e t) (let ((path (e (cadr x))) (body (caddr x)) (rest (cdddr x))) (if (pair? rest) (error "illegal define-handler" x)) (if (not (equal? (substring (conc (symbol->string path) " ") 0 4) "/v1/")) (error "path must start with /v1/" path)) `(begin (define ,path ,body) (set-handler! ,(symbol->string path) ,path))))))