 
 (defmethod send! DefaultContext
   [^DefaultContext context data]
-  (send data (:response context)))
-
-(defmethod send! Response
-  [^Response response data]
-  (send data response))
+  (send data (:catacumba/context context)))
 
 (defmulti adapter
   "A polymorphic function for create the

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defprotocol ISend
  (send [data response] "Send data."))

(defprotocol IHandlerResponse
  (handle-response [_ context] "Handle the ratpack handler response."))


(extend-protocol ISend
  String
  (send [data ^Context ctx]
    (let [^Response response (.getResponse ctx)]
      (.send response data)))

  clojure.core.async.impl.channels.ManyToManyChannel
  (send [data ^Context ctx]
    (-> (stream/publisher data)
        (send ctx)))

  manifold.stream.default.Stream
  (send [data ^Context ctx]
    (-> (stream/publisher data)
        (send ctx)))

  futura.promise.Promise
  (send [data ^Context ctx]
    (-> (stream/publisher data)
        (send ctx)))

  manifold.deferred.IDeferred
  (send [data ^Context ctx]
    (-> (stream/publisher data)
        (send ctx)))

  CompletableFuture
  (send [data ^Context ctx]
    (-> (stream/publisher data)
        (send ctx)))

  Publisher
  (send [data ^Context ctx]
    (let [^Response response (.getResponse ctx)]
      (->> (stream/publisher data)
           (stream/transform (map helpers/bytebuffer))
           (.stream ctx)
           (.sendStream response))))

  InputStream
  (send [data ^Context ctx]
    (let [^bytes buffer (byte-array 1024)
          ^ByteBuf buf (Unpooled/buffer (.available data))
          ^Response response (.getResponse ctx)]
      (loop [index 0]
        (let [readed (.read data buffer 0 1024)]
          (when-not (= readed -1)
