            ratpack.handling.Context
            ratpack.http.Request
            ratpack.http.Response
+           ratpack.http.ResponseMetaData
            ratpack.http.Headers
            ratpack.http.TypedData
            ratpack.http.MutableHeaders

  (get-cookies* [^Request request]
    (persistent!
     (reduce (fn [acc ^Cookie cookie]
               (let [name (keyword (.getname cookie))]
                 (assoc acc name (cookie->map cookie))))
             (transient {})
             (into [] (.getCookies request)))))

  (set-cookies* [_ _]
    (throw (UnsupportedOperationException.)))

  Response
  (get-cookies* [_]
    (throw (UnsupportedOperationException.)))

  (set-cookies* [response cookies]
    (loop [cookies (into [] cookies)]
      (when-let [[cookiename cookiedata] (first cookies)]
        (let [^Cookie cookie (.cookie response (name cookiename) "")]

  (get-headers* [^DefaultContext ctx]
    (get-headers* ^Request (:request ctx)))
  (set-headers* [^DefaultContext ctx headers]
    (set-headers* ^ResponseMetaData (:response ctx) headers))

  Request
  (get-headers* [^Request request]
