module Network.Wai.Middleware.ContentType.ByteString where

import           Network.Wai.Middleware.ContentType.Types
import           Network.HTTP.Types                      (Status, ResponseHeaders)
import           Network.Wai                             (Response, responseLBS)

import qualified Data.ByteString.Lazy                    as LBS
import qualified Blaze.ByteString.Builder.ByteString     as BU
import qualified Data.HashMap.Lazy                       as HM


-- * Lifted Combinators

bytestring :: Monad m =>
              FileExt
           -> LBS.ByteString
           -> FileExtListenerT (Status -> ResponseHeaders -> Response) m ()
bytestring fe i =
  tell' $ HM.singleton fe (bytestringOnly i)

{-# INLINEABLE bytestring #-}


-- * Data Only

-- | The exact same thing as @Network.Wai.responseLBS@.
bytestringOnly :: LBS.ByteString -> Status -> ResponseHeaders -> Response
bytestringOnly b s hs = responseLBS s hs b