api.rauhala.info/src/API.hs

36 lines
1.0 KiB
Haskell

{-# Language DataKinds #-}
{-# Language NoImplicitPrelude #-}
{-# Language TypeOperators #-}
{-# Language MultiParamTypeClasses #-}
{-# Language OverloadedStrings #-}
module API where
import Servant.API
import ClassyPrelude
import qualified API.IPFS as IPFS
import Network.HTTP.Media ((//), (/:))
import Text.Pandoc.Class (runPure)
import Text.Pandoc.Options (def)
import Text.Pandoc.Readers.Markdown (readMarkdown)
import Text.Pandoc.Writers.HTML (writeHtml5String)
data HTML
newtype Docs = Docs Text
instance MimeRender PlainText Docs where
mimeRender _ (Docs d) = fromStrict $ encodeUtf8 d
instance MimeRender HTML Docs where
mimeRender _ (Docs d) = either (encodeUtf8 . pack . show) (fromStrict . encodeUtf8) $ runPure (writeHtml5String def <=< readMarkdown def $ d)
instance Accept HTML where
contentType _ = "text" // "html" /: ("charset", "utf-8")
type API = "api" :> ("ipfs" :> IPFS.API)
type DocumentedAPI = API
:<|> "help" :> Get '[PlainText, HTML] Docs