             (log/debug "read-all: Done. Incoming:\n" (map #(String. %) result))
             result))))))
 
-(s/defn extract-router-message :- router-message
+(s2/defn extract-router-message :- router-message
   "Note that this limits the actual message to 1 frame of EDN"
   [frames :- fr-sch/byte-arrays]
   (log/debug "Extracting Router Message from "


;; Note that, in all honesty, this is pretty
;; inefficient.
(def request {:version {:major s/Int
                        :minor s/Int
                        :detail s/Int}
              :protocol s/Str
              ;; For dispatching messages that arrive on the same socket
              ;; but are really directed toward different end-points
              (s/optional-key :channel) s/Str
              :headers {(s/either s/Str s/Keyword) s/Any}
              :locator s/Str  ; think URL
              (s/optional-key :parameters) {:s/Keyword s/Any}  ; think GET
              ;; It's very tempting for the body to be just another dict like
              ;; :parameters. But it seems like we need to have some justification
              ;; for including them both.
              ;; And sticking GET params in the URL has always seemed pretty suspect
              (s/optional-key :body) s/Str})

(def router-message
  "The contents are byte-arrays? Really??

    frames :- fr-sch/byte-arrays]
   (dealer-send! s frames [])))

(s2/defn router-send!
  ([sock :- mq-cmn/Socket
    msg :- router-message]
   (router-send! sock msg []))
