36 lines
1.0 KiB
Haskell
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
|