2016-08-13 00:48:28 +02:00
|
|
|
|
2016-07-20 20:26:53 +02:00
|
|
|
{-# LANGUAGE TypeFamilies #-}
|
|
|
|
{-# LANGUAGE DataKinds #-}
|
|
|
|
{-# LANGUAGE RankNTypes #-}
|
|
|
|
|
|
|
|
module Network.GRPC.HighLevel.Generated where
|
|
|
|
|
|
|
|
import Network.GRPC.HighLevel.Server
|
|
|
|
import Network.GRPC.LowLevel.Call
|
|
|
|
|
|
|
|
-- | Used at the kind level as a parameter to service definitions
|
|
|
|
-- generated by the grpc compiler, with the effect of having the
|
|
|
|
-- field types reduce to the appropriate types for the method types.
|
|
|
|
data GRPCImpl = ServerImpl | ClientImpl
|
|
|
|
|
|
|
|
-- | GHC does not let us partially apply a type family. However, we
|
|
|
|
-- can define a type to use as an 'interpreter', and then use this
|
|
|
|
-- 'interpreter' type fully applied to get the same effect.
|
|
|
|
type family MkHandler (impl :: GRPCImpl) (methodType :: GRPCMethodType) i o
|
|
|
|
|
|
|
|
type instance MkHandler 'ServerImpl 'Normal i o = ServerHandler i o
|
|
|
|
type instance MkHandler 'ServerImpl 'ClientStreaming i o = ServerReaderHandler i o
|
|
|
|
type instance MkHandler 'ServerImpl 'ServerStreaming i o = ServerWriterHandler i o
|
|
|
|
type instance MkHandler 'ServerImpl 'BiDiStreaming i o = ServerRWHandler i o
|