(ns metabase.server.protocols (:require [potemkin.types :as p.types] [ring.util.jakarta.servlet :as servlet])) | |
Protocol for converting API endpoint responses to something Jetty can handle. | (p.types/defprotocol+ Respond
(respond [body context]
"Convert an API endpoint response to something Jetty-friendly. Default impl uses Ring functionality to write the
response to a Jetty `OutputStream`. Things that need more advanced functionality than what Ring provides (such as
the streaming response logic) provide their own custom implementations of this method.
`context` has the following keys:
* `:request` -- `jakarta.servlet.http.HttpServletRequest`
* `:request-map` -- Ring request map
* `:async-context` -- `jakarta.servlet.AsyncContext`
* `:response` -- `jakarta.servlet.http.HttpServletResponse`
* `:response-map` -- Ring response map")) |
(extend-protocol Respond
nil
(respond [_ {:keys [async-context response response-map]}]
(servlet/update-servlet-response response async-context response-map))
Object
(respond [_ {:keys [async-context response response-map]}]
(servlet/update-servlet-response response async-context response-map))) | |