module Utils (renderCommonmarkViaHtml, responseToServerError, throwToHandler) where
import Relude
import Commonmark
import Commonmark.Extensions.PipeTable
import Commonmark.Extensions.Strikethrough
import Control.Monad.Except (throwError)
import Network.HTTP.Types (statusCode)
import Polysemy (Final, Member, Sem, embedFinal)
import Servant.Client
import Servant.Server (Handler, ServerError (..))
renderCommonmarkViaHtml :: Text -> Text
renderCommonmarkViaHtml content =
commonmarkWith (defaultSyntaxSpec <> strikethroughSpec <> pipeTableSpec) "" content
& runIdentity
& either (const content) (toStrict . renderHtml @())
responseToServerError :: Response -> ServerError
responseToServerError resp =
ServerError
{ errHTTPCode = resp.responseStatusCode.statusCode
, errReasonPhrase = "4rum.i2p returned error"
, errBody = resp.responseBody
, errHeaders = toList resp.responseHeaders
}
throwToHandler :: Member (Final Handler) rs => ServerError -> Sem rs a
throwToHandler = embedFinal @Handler . throwError