{-# 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 urlbase m ()
text :: forall (m :: * -> *) urlbase.
Monad m =>
Text -> FileExtListenerT urlbase m ()
text Text
i =
  forall w (m :: * -> *). (Monoid w, MonadState w m) => w -> m ()
tell' forall a b. (a -> b) -> a -> b
$ forall k v. Hashable k => k -> v -> HashMap k v
HM.singleton FileExt
Text forall a b. (a -> b) -> a -> b
$
    forall a.
a
-> Status
-> ResponseHeaders
-> (a -> Status -> ResponseHeaders -> Response)
-> ResponseVia
ResponseVia
      Text
i
      Status
status200
      [(HeaderName
"Content-Type", ByteString
"text/plain")]
      Text -> Status -> ResponseHeaders -> Response
textOnly

{-# INLINEABLE text #-}


-- * Data Only

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