servant-avro-0.1.0.0: src/Servant/API/ContentTypes/Avro.hs
{-# 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
-- | The Avro encoding type for Servant
data Avro
deriving Typeable
instance Accept Avro where
-- The content type is given by https://avro.apache.org/docs/1.8.1/spec.html#HTTP+as+Transport
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