 
 (defrecord PendingMessage [route comp])
 (defrecord RoutedMessage [route comp])
-(defrecord AbortRoute [route])
+(defrecord Abort [route])
 
 (defn- concat-symbols [prefix & syms]
   (letfn [(sym-to-str [s]

        ]
    `(defrule ~rname
       [~reqsym ~'<- PendingMessage (= ~*route* ~'route) (contains? ~prev-comps ~'comp)]
       [:not [AbortRoute (or (nil? ~'route) (= ~*route* ~'route))]]
       ~'=>
       (debug ~logmsg)
       (insert! (map->RoutedMessage (assoc ~reqsym :comp ~(if (fn? next-comp)

        reqsym (gensym "?req-")
        keysym (symbol (name key))]
    `(defrule ~rname
       [~reqsym ~'<- PendingMessage [{:keys [~'route ~keysym]}]
        ~@(when *route* `[(= ~*route* ~'route)]) (not (nil? ~keysym))]
       ~@(when (not abort-route?)
           `[[:not ~(if *route*
                      `[Abort (or (nil? ~'route) (= ~*route* ~'route))]
                      `[Abort])]])
       ~'=>
       (debug ~logmsg)
       ~@(when abort-route?
           `[(insert! (->Abort ~*route*))])
       (insert! (map->RoutedMessage (assoc ~reqsym :comp ~next-comp))))))

(defn process [this req]
