Types.hs
1 {-| 2 Module : Gargantext.API..Types 3 Description : Ngrams List Types 4 Copyright : (c) CNRS, 2017-Present 5 License : AGPL + CECILL v3 6 Maintainer : team@gargantext.org 7 Stability : experimental 8 Portability : POSIX 9 10 -} 11 12 {-# OPTIONS_GHC -fprint-potential-instances #-} 13 14 module Gargantext.API.Types where 15 16 import Data.Aeson 17 import qualified Data.ByteString.Lazy.Char8 as BS8 18 import Data.Either (Either(..)) 19 import Data.List.NonEmpty (NonEmpty ((:|))) 20 import Data.Text (Text) 21 import qualified Data.Text.Encoding as E 22 import Data.Typeable 23 import Network.HTTP.Media ((//), (/:)) 24 import Prelude (($)) 25 import qualified Prelude 26 import Servant 27 ( Accept(..) 28 , MimeRender(..) 29 , MimeUnrender(..) ) 30 31 data HTML deriving (Typeable) 32 instance Accept HTML where 33 contentTypes _ = "text" // "html" /: ("charset", "utf-8") :| ["text" // "html"] 34 instance MimeRender HTML BS8.ByteString where 35 mimeRender _ = Prelude.id 36 instance MimeUnrender HTML BS8.ByteString where 37 mimeUnrender _ bs = Right bs 38 instance MimeRender HTML Text where 39 mimeRender _ bs = BS8.fromStrict $ E.encodeUtf8 bs 40 instance MimeUnrender HTML Text where 41 mimeUnrender _ bs = Right $ E.decodeUtf8 $ BS8.toStrict bs 42 instance {-# OVERLAPPABLE #-} ToJSON a => MimeRender HTML a where 43 mimeRender _ = encode