webgear-core-1.1.0: src/WebGear/Core/Response.hs
{- |
Responses from handlers.
-}
module WebGear.Core.Response (
-- * Basic Types
Response (..),
ResponseBody (..),
toWaiResponse,
) where
import qualified Data.Binary.Builder as B
import qualified Network.HTTP.Types as HTTP
import qualified Network.Wai as Wai
{- | An HTTP response sent from the server to the client.
The response contains a status, optional headers and an optional
body payload.
-}
data Response = Response
{ responseStatus :: HTTP.Status
-- ^ Response status code
, responseHeaders :: HTTP.ResponseHeaders
-- ^ Response headers
, responseBody :: ResponseBody
-- ^ The response body
}
data ResponseBody
= ResponseBodyFile FilePath (Maybe Wai.FilePart)
| ResponseBodyBuilder B.Builder
| ResponseBodyStream Wai.StreamingBody
-- | Generate a WAI response
toWaiResponse :: Response -> Wai.Response
toWaiResponse Response{..} =
case responseBody of
ResponseBodyFile fpath fpart ->
Wai.responseFile responseStatus responseHeaders fpath fpart
ResponseBodyBuilder builder ->
Wai.responseBuilder responseStatus responseHeaders builder
ResponseBodyStream stream ->
Wai.responseStream responseStatus responseHeaders stream