webgear-core-1.0.0: src/WebGear/Core/Response.hs
{- |
Responses from handlers.
-}
module WebGear.Core.Response (
-- * Basic Types
Response (..),
toWaiResponse,
) where
import Data.ByteString (ByteString)
import qualified Data.ByteString.Lazy as LBS
import qualified Data.HashMap.Strict as HM
import Data.Maybe (fromMaybe)
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
{ -- | Response status code
responseStatus :: HTTP.Status
, -- | Response headers
responseHeaders :: HM.HashMap HTTP.HeaderName ByteString
, -- | Optional response body
responseBody :: Maybe LBS.ByteString
}
deriving stock (Eq, Ord, Show)
-- | Generate a WAI response
toWaiResponse :: Response -> Wai.Response
toWaiResponse Response{..} =
Wai.responseLBS responseStatus (HM.toList responseHeaders) (fromMaybe "" responseBody)