datadog-tracing-1.3.2: library/Servant/MsgPack.hs
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
-- | msgpack support for Servant, piggy backing off Aeson.
--
-- Note: if we wish to improve performance and/or control over the msgpack
-- formats, we should avoid the Aeson intermediate format and create direct
-- MessagePack a => Mime(R,Unr)ender instances.
module Servant.MsgPack where
import Data.Aeson
import Data.List.NonEmpty
import Data.MessagePack.Aeson
import Network.HTTP.Media ((//))
import Servant.API.ContentTypes
data MsgPack
instance Accept MsgPack where
contentTypes _ = fromList [ "application" // "msgpack"
, "application" // "x-msgpack"
, "application" // "vnd.msgpack"]
instance ToJSON a => MimeRender MsgPack a where
mimeRender _ = packToJSON
instance FromJSON a => MimeUnrender MsgPack a where
mimeUnrender _ b = case unpackFromJSON b of
Error str -> Left str
Success a -> Right a