{-# LANGUAGE
    OverloadedStrings
  #-}


module Network.Wai.Middleware.ContentType.Cassius where

import           Network.Wai.Middleware.ContentType.Types as CT
import           Network.Wai.Middleware.ContentType.Text  (textOnly)
import           Network.HTTP.Types                       (status200, Status, ResponseHeaders)
import           Network.Wai                              (Response)

import           Text.Cassius (Css, renderCss)
import qualified Data.HashMap.Lazy                        as HM


-- * Lifted Combinators

cassius :: Monad m =>
           Css
        -> FileExtListenerT urlbase m ()
cassius :: forall (m :: * -> *) urlbase.
Monad m =>
Css -> FileExtListenerT urlbase m ()
cassius Css
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
CT.Css forall a b. (a -> b) -> a -> b
$
    forall a.
a
-> Status
-> ResponseHeaders
-> (a -> Status -> ResponseHeaders -> Response)
-> ResponseVia
ResponseVia
      Css
i
      Status
status200
      [(HeaderName
"Content-Type", ByteString
"text/css")]
      Css -> Status -> ResponseHeaders -> Response
cassiusOnly

{-# INLINEABLE cassius #-}


-- * Data Only

cassiusOnly :: Css -> Status -> ResponseHeaders -> Response
cassiusOnly :: Css -> Status -> ResponseHeaders -> Response
cassiusOnly Css
c =
  Text -> Status -> ResponseHeaders -> Response
textOnly (Css -> Text
renderCss Css
c)