{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
module Servant.API.ContentTypes.Avro (Avro) where
import Data.Avro (FromAvro, Result (..), ToAvro,
decode, encode)
import Data.Proxy (Proxy (..))
import Data.Typeable (Typeable)
import Servant.API.ContentTypes
data Avro
deriving Typeable
instance Accept Avro where
contentType Proxy = "avro/binary"
instance ToAvro a => MimeRender Avro a where
mimeRender Proxy = encode
instance FromAvro a => MimeUnrender Avro a where
mimeUnrender Proxy encoded =
case decode encoded of
Error errstr -> Left errstr
Success val -> Right val