{-# LANGUAGE
    OverloadedStrings
  #-}

module Network.Wai.Middleware.ContentType.Text where

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

import qualified Data.Text.Lazy                           as LT
import qualified Data.Text.Lazy.Encoding                  as LT
import qualified Data.HashMap.Lazy                        as HM


-- * Lifted Combinators

text :: Monad m =>
        LT.Text
     -> FileExtListenerT m ()
text i =
  tell' $ HM.singleton Text $
    ResponseVia
      i
      status200
      [("Content-Type", "text/plain")]
      textOnly

{-# INLINEABLE text #-}


-- * Data Only

textOnly :: LT.Text -> Status -> ResponseHeaders -> Response
textOnly t s hs =
  responseBuilder s hs (LT.encodeUtf8Builder t)