{-# LANGUAGE
    OverloadedStrings
  #-}


module Network.Wai.Middleware.ContentType.Clay 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           Clay.Render (Config, renderWith)
import           Clay.Stylesheet (Css, App)
import qualified Data.HashMap.Lazy                        as HM


-- * Lifted Combinators

clay :: Monad m =>
        Config -> [App] -> Css
     -> FileExtListenerT urlbase m ()
clay :: forall (m :: * -> *) urlbase.
Monad m =>
Config -> [App] -> Css -> FileExtListenerT urlbase m ()
clay Config
c [App]
as 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
      (Config
c,[App]
as,Css
i)
      Status
status200
      [(HeaderName
"Content-Type",ByteString
"text/css")]
      (\(Config
c',[App]
as',Css
i') -> Config -> [App] -> Css -> Status -> ResponseHeaders -> Response
clayOnly Config
c' [App]
as' Css
i')

{-# INLINEABLE clay #-}


-- * Data Only

clayOnly :: Config -> [App] -> Css -> Status -> ResponseHeaders -> Response
clayOnly :: Config -> [App] -> Css -> Status -> ResponseHeaders -> Response
clayOnly Config
c [App]
as Css
css =
  Text -> Status -> ResponseHeaders -> Response
textOnly (Config -> [App] -> Css -> Text
renderWith Config
c [App]
as Css
css)