 (defprotocol Match
   (match [pred object]
     "Does predicate describe object?"))
+
+; Deprecation
+(defmacro deprecated
+  "Wraps body in an implicit (do), and logs a deprecation notice when invoked."
+  [comment & body]
+  `(do
+     (info ~(str "Deprecated: " comment))
+     ~@body))
 
 ; Times
 (defn time-at

            [clojure.java.io :as io])
  (:use [clojure.string :only [split]]
        [riemann.time :only [unix-time]]
        riemann.codec
        gloss.core
        clojure.math.numeric-tower))

  (clj-time.format/unparse (clj-time.format/formatters :date-time)
                           (clj-time.coerce/from-long (long (* 1000 unix)))))

; Events
(defn post-load-event
  "After events are loaded, we assign default times if none exist."
  [e]
