prodapi-0.1.0.0: src/Prod/MimeTypes.hs
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
module Prod.MimeTypes where
import Data.ByteString (ByteString)
import Data.ByteString.Lazy (fromStrict)
import qualified Network.HTTP.Media as M
import Servant
import System.IO.Unsafe
data HTML
data PNG
data SVG
data GraphPictureData
= GraphPictureData
{ graphvizInput :: !ByteString
, serializedPng :: (IO ByteString)
, serializedSvg :: (IO ByteString)
}
instance Accept HTML where
contentType _ = "text" M.// "html" M./: ("charset", "utf-8")
instance Accept PNG where
contentType _ = "image" M.// "png"
instance MimeRender PNG GraphPictureData where
mimeRender _ = fromStrict . unsafePerformIO . serializedPng
instance MimeRender PlainText GraphPictureData where
mimeRender _ = fromStrict . graphvizInput
instance Accept SVG where
contentType _ = "image" M.// "svg"
instance MimeRender SVG GraphPictureData where
mimeRender _ = fromStrict . unsafePerformIO . serializedSvg