{-# LANGUAGE CPP #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
module Servant.HTML.Lucid where
import qualified Data.List.NonEmpty as NE
import Data.Typeable (Typeable)
import Lucid (ToHtml (..), renderBS)
import qualified Network.HTTP.Media as M
import Servant.API (Accept (..), MimeRender (..))
data HTML deriving Typeable
instance Accept HTML where
contentTypes :: Proxy HTML -> NonEmpty MediaType
contentTypes Proxy HTML
_ =
ByteString
"text" ByteString -> ByteString -> MediaType
M.// ByteString
"html" MediaType -> (ByteString, ByteString) -> MediaType
M./: (ByteString
"charset", ByteString
"utf-8") MediaType -> [MediaType] -> NonEmpty MediaType
forall a. a -> [a] -> NonEmpty a
NE.:|
[ByteString
"text" ByteString -> ByteString -> MediaType
M.// ByteString
"html"]
instance ToHtml a => MimeRender HTML a where
mimeRender :: Proxy HTML -> a -> ByteString
mimeRender Proxy HTML
_ = Html () -> ByteString
forall a. Html a -> ByteString
renderBS (Html () -> ByteString) -> (a -> Html ()) -> a -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Html ()
forall a (m :: * -> *). (ToHtml a, Monad m) => a -> HtmlT m ()
toHtml