{-# LANGUAGE
OverloadedStrings
#-}
module Network.Wai.Middleware.ContentType.Json where
import Network.Wai.Middleware.ContentType.Types (FileExtListenerT, FileExt (Json), mapHeaders, overFileExts)
import Network.Wai.Middleware.ContentType.ByteString (bytestringOnly, bytestring)
import Network.HTTP.Types (Status, ResponseHeaders)
import Network.Wai (Response)
import qualified Data.Aeson as A
import Control.Monad.IO.Class (MonadIO (..))
json :: ( A.ToJSON j
, MonadIO m
) => j
-> FileExtListenerT m ()
json =
overFileExts [Json] (mapHeaders (("Content-Type","application/json"):))
. bytestring Json . A.encode
{-# INLINEABLE json #-}
jsonOnly :: A.ToJSON j => j -> Status -> ResponseHeaders -> Response
jsonOnly j =
bytestringOnly (A.encode j)
{-# INLINEABLE jsonOnly #-}