packages feed

mu-grpc-common-0.2.0.0: src/Mu/GRpc/Bridge.hs

{-# language DataKinds             #-}
{-# language FlexibleContexts      #-}
{-# language FlexibleInstances     #-}
{-# language MultiParamTypeClasses #-}
{-# language PolyKinds             #-}
{-# language TypeFamilies          #-}
{-# language UndecidableInstances  #-}
module Mu.GRpc.Bridge where

import           Data.ByteString
import           Data.Kind
import           Data.Proxy
import           Network.GRPC.HTTP2.Proto3Wire

import           Mu.GRpc.Avro

data GRpcMessageProtocol
  = MsgProtoBuf | MsgAvro
  deriving (Eq, Show)

msgProtoBuf :: Proxy 'MsgProtoBuf
msgProtoBuf = Proxy
msgAvro :: Proxy 'MsgAvro
msgAvro = Proxy

class MkRPC (p :: GRpcMessageProtocol) where
  type RPCTy p :: Type
  mkRPC :: Proxy p -> ByteString -> ByteString -> ByteString -> RPCTy p
instance MkRPC 'MsgProtoBuf where
  type RPCTy 'MsgProtoBuf = RPC
  mkRPC _ = RPC
instance MkRPC 'MsgAvro where
  type RPCTy 'MsgAvro = AvroRPC
  mkRPC _ = AvroRPC