{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module Servant.API.ContentTypes.Proto where

import Network.HTTP.Media ((//), (/:))
import qualified Data.ByteString.Lazy as BS
import qualified Data.List.NonEmpty as NE
import qualified Data.ProtoLens as P
import qualified Servant.API.ContentTypes as S

data Proto

instance S.Accept Proto where
    contentTypes _ = NE.fromList
        [ "application" // "protobuf"
        , "application" // "x-protobuf"
        , "application" // "vnd.google.protobuf"
        ]

instance P.Message m => S.MimeRender Proto m where
    mimeRender _ = BS.fromStrict . P.encodeMessage

instance P.Message m => S.MimeUnrender Proto m where
    mimeUnrender _ = P.decodeMessage . BS.toStrict
    -- XXX: there's also mimeUnrenderWithType