 
 (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


(extend-protocol ISend
  String
  (send [data ^Response response]
    (.send response data))

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

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

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

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

  CompletableFuture
  (send [data ^Response response]
    (-> (stream/publisher data)
        (send response)))

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

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

(extend-protocol IHandlerResponse
  String
  (handle-response [data ^DefaultContext context]
    (send data (:catacumba/context context)))

  clojure.lang.IPersistentMap
  (handle-response [data ^DefaultContext context]
    (let [{:keys [status headers body]} data]
      (when status (set-status* context status))
      (when headers (set-headers* context headers))
      (send body (:catacumba/context context))))

  catacumba.impl.http.Response
  (handle-response [data ^DefaultContext context]
    (set-status* context (:status data))
    (set-headers* context (:headers data))
    (send (:body data) (:catacumba/context context)))

  clojure.core.async.impl.channels.ManyToManyChannel
  (handle-response [data ^DefaultContext context]
    (set-status* context 200)
    (send data (:catacumba/context context)))

  manifold.stream.default.Stream
  (handle-response [data ^DefaultContext context]
    (set-status* context 200)
    (send data (:catacumba/context context)))

  Publisher
  (handle-response [data ^DefaultContext context]
    (set-status* context 200)
    (send data (:catacumba/context context)))

  futura.promise.Promise
  (handle-response [data ^DefaultContext context]
    (set-status* context 200)
    (send data (:catacumba/context context)))

  CompletableFuture
  (handle-response [data ^DefaultContext context]
