convert register-stanza-handler to syntax
authorrekado <rekado@elephly.net>
Thu, 11 Dec 2014 19:48:13 +0000 (20:48 +0100)
committerrekado <rekado@elephly.net>
Thu, 11 Dec 2014 19:48:13 +0000 (20:48 +0100)
allow omitting guard expression.

xmpp.scm

index 1e91713..546edfc 100644 (file)
--- a/xmpp.scm
+++ b/xmpp.scm
 (define *stanza-handlers* '())
 (define *stanza-id-handlers* (make-hash-table))
 
-(define (register-stanza-handler predicate handler)
-  "Register handler function that will be executed when a stanza is
+(define-syntax register-stanza-handler
+  (lambda (s)
+    "Register handler function that will be executed when a stanza is
 encountered that matches the given predicate."
-  (set! *stanza-handlers* (cons `(,predicate . ,handler) *stanza-handlers*)))
+    (syntax-case s ()
+      ((_ guard handler)
+       (if (eqv? #t (syntax->datum #'guard))
+           #'(set! *stanza-handlers* (cons `(,(lambda _ #t) . ,handler) *stanza-handlers*))
+           #'(set! *stanza-handlers* (cons `(,guard . ,handler) *stanza-handlers*))))
+      ((_ handler)
+       #'(set! *stanza-handlers* (cons `(,(lambda _ #t) . ,handler) *stanza-handlers*))))))
 
 (define (register-temp-stanza-handler-for-id stanza-id handler)
   "Register handler function that will be executed when a stanza with