{-# 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