{-# LANGUAGE CPP                   #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings     #-}

  HTML is a Servant combinator for the "text/html" MIME type, equipped with instances
  for serving Shpadoinkle's 'Html' type.

module Shpadoinkle.Router.HTML (HTML) where

#ifndef ghcjs_HOST_OS

import qualified Data.ByteString.Lazy       as BSL
import qualified Data.List.NonEmpty         as NE
import           Data.Text.Encoding
import qualified Network.HTTP.Media         as M
import           Servant.API                (Accept (..), MimeRender (..))

import           Shpadoinkle
import           Shpadoinkle.Backend.Static (renderStatic)

data HTML

instance Accept HTML where
    contentTypes _ =
      "text" M.// "html" M./: ("charset", "utf-8") NE.:|
      ["text" M.// "html"]

instance MimeRender HTML (Html m a) where
  mimeRender _ =  BSL.fromStrict . encodeUtf8 . renderStatic


data HTML