{-# LANGUAGE
    OverloadedStrings
  #-}

module Network.Wai.Middleware.ContentType.Text where

import           Network.Wai.Middleware.ContentType.Types (FileExtListenerT, tell', FileExt (Text), ResponseVia (..))
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)