packages feed

warp-grpc 0.1.0.0 → 0.1.0.1

raw patch · 7 files changed

+14/−1361 lines, 7 filesdep −proto-lens-protocdep −warp-grpc

Dependencies removed: proto-lens-protoc, warp-grpc

Files

README.md view
@@ -4,62 +4,6 @@ contains a demo sever using the awesome `grpcb.in` Proto. The current release is an advanced technical demo, expect a few breaking changes. -## Usage--### Prerequisites--In addition to a working Haskell dev environment, you need to:-- build the `proto-lens-protoc` executable (`proto-lens`)-- install the `protoc` executable--### Adding .proto files to a Haskell package--In order to run gRPC:--- generate the `Proto` stubs in some `gen` directory--A single `protoc` invocation may be enough for both Proto and GRPC outputs:--```bash-protoc  "--plugin=protoc-gen-haskell-protolens=${protolens}" \-    --haskell-protolens_out=./gen \-    -I "${protodir1} \-    -I "${protodir2} \-    ${first.proto} \-    ${second.proto}-```--- add the `gen` sourcedir for the generated to your .cabal/package.yaml file (cf. 'hs-source-dirs').-- add the generated Proto modules to the 'exposed-modules' (or 'other-modules') keys--A reliable way to list the module names is the following bash invocation:--```bash-find gen -name "*.hs" | sed -e 's/gen\///' | sed -e 's/\.hs$//' | tr '/' '.'-```--Unlike `proto-lens`, this project does not yet provide a modified `Setup.hs`.-As a result, we cannot automate these steps from within Cabal/Stack. Hence,-you'll have to automate these steps outside your Haskell toolchain.---### Build a certificate--In shell,--```shell-openssl genrsa -out key.pem 2048-openssl req -new -key key.pem -out certificate.csr-openssl x509 -req -in certificate.csr -signkey key.pem -out certificate.pem-```--### Build and run the example binary--- stack build-- stack exec -- warp-grpc-exe--Note that you'll need a patched Warp using https://github.com/yesodweb/wai/pull/711 .- ## Design  The library implements gRPC using a WAI middleware for a set of gRPC endpoints.@@ -72,9 +16,15 @@ an output only when the client has stopped streaming. Server streams wait for an input before starting to iterate sending outputs. +## Usage++Generate some `proto-lens` code from `.proto` files, ideally in a separate+library.  Import this library and the generated proto-lens code to implement+handlers for the `service` stanzas defined in the `.proto` files (see+Haddocks). Finally, serve `warp` over TLS`.+ ## Next steps -* Split the `grpcb.in` example from the lib. * Handler type for bidirectional streams.  ## Limitations
− app/Main.hs
@@ -1,69 +0,0 @@-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE DataKinds #-}-module Main where--import Network.GRPC.Server--import Control.Concurrent (threadDelay)-import Data.ProtoLens.Message (def)-import Network.Wai.Handler.WarpTLS (defaultTlsSettings)-import Network.Wai.Handler.Warp (defaultSettings)-import Network.GRPC.HTTP2.Types (RPC(..))-import Network.GRPC.HTTP2.Encoding (gzip)-import Proto.Protos.Grpcbin (GRPCBin, EmptyMessage(..), IndexReply(..), IndexReply'Endpoint(..))--main :: IO ()-main = runGrpc defaultTlsSettings defaultSettings handlers [gzip]--handlers :: [ServiceHandler]-handlers =-  [ unary (RPC :: RPC GRPCBin "empty") handleEmpty-  , unary (RPC :: RPC GRPCBin "index") handleIndex-  , unary (RPC :: RPC GRPCBin "specificError") handleSpecificError-  , unary (RPC :: RPC GRPCBin "randomError") handleRandomError-  , unary (RPC :: RPC GRPCBin "dummyUnary") handleDummyUnary-  , serverStream (RPC :: RPC GRPCBin "dummyServerStream") handleDummyServerStream-  , clientStream (RPC :: RPC GRPCBin "dummyClientStream") handleDummyClientStream-  ]--handleIndex :: UnaryHandler GRPCBin "index"-handleIndex _ input = do-    print ("index"::[Char], input)-    return $ IndexReply "desc" [IndexReply'Endpoint "/path1" "ill-supported" def] def--handleEmpty :: UnaryHandler GRPCBin "empty"-handleEmpty _ input = do-    print ("empty"::[Char], input)-    return $ EmptyMessage def--handleSpecificError :: UnaryHandler GRPCBin "specificError"-handleSpecificError _ input = do-    print ("specificError"::[Char], input)-    _ <- throwIO $ GRPCStatus INTERNAL "noo"-    return $ EmptyMessage def--handleRandomError :: UnaryHandler GRPCBin "randomError"-handleRandomError _ input = do-    print ("randomError"::[Char], input)-    return $ EmptyMessage def--handleDummyUnary :: UnaryHandler GRPCBin "dummyUnary"-handleDummyUnary _ input = pure input--handleDummyServerStream :: ServerStreamHandler GRPCBin "dummyServerStream" Int-handleDummyServerStream _ input = do-    print ("sstream-start"::[Char], input)-    return $ (10, ServerStream $ \n -> do-        threadDelay 1000000-        if n == 0-        then print ("sstream-end"::[Char]) >> return Nothing-        else do-            print ("sstream-msg"::[Char], n)-            return $ Just (n-1, def))--handleDummyClientStream :: ClientStreamHandler GRPCBin "dummyClientStream" Int-handleDummyClientStream _ = do-    print ("cstream-start"::[Char])-    return $ (0, ClientStream-                     (\n input -> print ("cstream-msg"::[Char], n, input) >> return (n+1))-                     (\n -> print ("cstream-end"::[Char], n) >> return def))
− gen/Proto/Protos/Grpcbin.hs
@@ -1,986 +0,0 @@-{- This file was auto-generated from protos/grpcbin.proto by the proto-lens-protoc program. -}-{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies,-  UndecidableInstances, GeneralizedNewtypeDeriving,-  MultiParamTypeClasses, FlexibleContexts, FlexibleInstances,-  PatternSynonyms, MagicHash, NoImplicitPrelude, DataKinds #-}-{-# OPTIONS_GHC -fno-warn-unused-imports#-}-{-# OPTIONS_GHC -fno-warn-duplicate-exports#-}-module Proto.Protos.Grpcbin-       (GRPCBin(..), DummyMessage(..), DummyMessage'Enum(..),-        DummyMessage'Enum(), DummyMessage'Enum'UnrecognizedValue,-        DummyMessage'Sub(..), EmptyMessage(..), HeadersMessage(..),-        HeadersMessage'MetadataEntry(..), HeadersMessage'Values(..),-        IndexReply(..), IndexReply'Endpoint(..), SpecificErrorRequest(..))-       where-import qualified Data.ProtoLens.Reexport.Lens.Labels.Prism-       as Lens.Labels.Prism-import qualified Data.ProtoLens.Reexport.Prelude as Prelude-import qualified Data.ProtoLens.Reexport.Data.Int as Data.Int-import qualified Data.ProtoLens.Reexport.Data.Word as Data.Word-import qualified Data.ProtoLens.Reexport.Data.ProtoLens-       as Data.ProtoLens-import qualified-       Data.ProtoLens.Reexport.Data.ProtoLens.Message.Enum-       as Data.ProtoLens.Message.Enum-import qualified-       Data.ProtoLens.Reexport.Data.ProtoLens.Service.Types-       as Data.ProtoLens.Service.Types-import qualified Data.ProtoLens.Reexport.Lens.Family2-       as Lens.Family2-import qualified Data.ProtoLens.Reexport.Lens.Family2.Unchecked-       as Lens.Family2.Unchecked-import qualified Data.ProtoLens.Reexport.Data.Default.Class-       as Data.Default.Class-import qualified Data.ProtoLens.Reexport.Data.Text as Data.Text-import qualified Data.ProtoLens.Reexport.Data.Map as Data.Map-import qualified Data.ProtoLens.Reexport.Data.ByteString-       as Data.ByteString-import qualified Data.ProtoLens.Reexport.Data.ByteString.Char8-       as Data.ByteString.Char8-import qualified Data.ProtoLens.Reexport.Lens.Labels as Lens.Labels-import qualified Data.ProtoLens.Reexport.Text.Read as Text.Read--{- | Fields :--    * 'Proto.Protos.Grpcbin_Fields.fString' @:: Lens' DummyMessage Data.Text.Text@-    * 'Proto.Protos.Grpcbin_Fields.fStrings' @:: Lens' DummyMessage [Data.Text.Text]@-    * 'Proto.Protos.Grpcbin_Fields.fInt32' @:: Lens' DummyMessage Data.Int.Int32@-    * 'Proto.Protos.Grpcbin_Fields.fInt32s' @:: Lens' DummyMessage [Data.Int.Int32]@-    * 'Proto.Protos.Grpcbin_Fields.fEnum' @:: Lens' DummyMessage DummyMessage'Enum@-    * 'Proto.Protos.Grpcbin_Fields.fEnums' @:: Lens' DummyMessage [DummyMessage'Enum]@-    * 'Proto.Protos.Grpcbin_Fields.fSub' @:: Lens' DummyMessage DummyMessage'Sub@-    * 'Proto.Protos.Grpcbin_Fields.maybe'fSub' @:: Lens' DummyMessage (Prelude.Maybe DummyMessage'Sub)@-    * 'Proto.Protos.Grpcbin_Fields.fSubs' @:: Lens' DummyMessage [DummyMessage'Sub]@-    * 'Proto.Protos.Grpcbin_Fields.fBool' @:: Lens' DummyMessage Prelude.Bool@-    * 'Proto.Protos.Grpcbin_Fields.fBools' @:: Lens' DummyMessage [Prelude.Bool]@-    * 'Proto.Protos.Grpcbin_Fields.fInt64' @:: Lens' DummyMessage Data.Int.Int64@-    * 'Proto.Protos.Grpcbin_Fields.fInt64s' @:: Lens' DummyMessage [Data.Int.Int64]@-    * 'Proto.Protos.Grpcbin_Fields.fBytes' @:: Lens' DummyMessage Data.ByteString.ByteString@-    * 'Proto.Protos.Grpcbin_Fields.fBytess' @:: Lens' DummyMessage [Data.ByteString.ByteString]@-    * 'Proto.Protos.Grpcbin_Fields.fFloat' @:: Lens' DummyMessage Prelude.Float@-    * 'Proto.Protos.Grpcbin_Fields.fFloats' @:: Lens' DummyMessage [Prelude.Float]@- -}-data DummyMessage = DummyMessage{_DummyMessage'fString ::-                                 !Data.Text.Text,-                                 _DummyMessage'fStrings :: ![Data.Text.Text],-                                 _DummyMessage'fInt32 :: !Data.Int.Int32,-                                 _DummyMessage'fInt32s :: ![Data.Int.Int32],-                                 _DummyMessage'fEnum :: !DummyMessage'Enum,-                                 _DummyMessage'fEnums :: ![DummyMessage'Enum],-                                 _DummyMessage'fSub :: !(Prelude.Maybe DummyMessage'Sub),-                                 _DummyMessage'fSubs :: ![DummyMessage'Sub],-                                 _DummyMessage'fBool :: !Prelude.Bool,-                                 _DummyMessage'fBools :: ![Prelude.Bool],-                                 _DummyMessage'fInt64 :: !Data.Int.Int64,-                                 _DummyMessage'fInt64s :: ![Data.Int.Int64],-                                 _DummyMessage'fBytes :: !Data.ByteString.ByteString,-                                 _DummyMessage'fBytess :: ![Data.ByteString.ByteString],-                                 _DummyMessage'fFloat :: !Prelude.Float,-                                 _DummyMessage'fFloats :: ![Prelude.Float],-                                 _DummyMessage'_unknownFields :: !Data.ProtoLens.FieldSet}-                      deriving (Prelude.Show, Prelude.Eq, Prelude.Ord)-instance (Lens.Labels.HasLens' f DummyMessage x a, a ~ b) =>-         Lens.Labels.HasLens f DummyMessage DummyMessage x a b-         where-        lensOf = Lens.Labels.lensOf'-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f DummyMessage "fString" (Data.Text.Text)-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _DummyMessage'fString-                 (\ x__ y__ -> x__{_DummyMessage'fString = y__}))-              Prelude.id-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f DummyMessage "fStrings" ([Data.Text.Text])-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _DummyMessage'fStrings-                 (\ x__ y__ -> x__{_DummyMessage'fStrings = y__}))-              Prelude.id-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f DummyMessage "fInt32" (Data.Int.Int32)-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _DummyMessage'fInt32-                 (\ x__ y__ -> x__{_DummyMessage'fInt32 = y__}))-              Prelude.id-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f DummyMessage "fInt32s" ([Data.Int.Int32])-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _DummyMessage'fInt32s-                 (\ x__ y__ -> x__{_DummyMessage'fInt32s = y__}))-              Prelude.id-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f DummyMessage "fEnum" (DummyMessage'Enum)-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _DummyMessage'fEnum-                 (\ x__ y__ -> x__{_DummyMessage'fEnum = y__}))-              Prelude.id-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f DummyMessage "fEnums" ([DummyMessage'Enum])-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _DummyMessage'fEnums-                 (\ x__ y__ -> x__{_DummyMessage'fEnums = y__}))-              Prelude.id-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f DummyMessage "fSub" (DummyMessage'Sub)-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _DummyMessage'fSub-                 (\ x__ y__ -> x__{_DummyMessage'fSub = y__}))-              (Data.ProtoLens.maybeLens Data.Default.Class.def)-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f DummyMessage "maybe'fSub"-           (Prelude.Maybe DummyMessage'Sub)-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _DummyMessage'fSub-                 (\ x__ y__ -> x__{_DummyMessage'fSub = y__}))-              Prelude.id-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f DummyMessage "fSubs" ([DummyMessage'Sub])-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _DummyMessage'fSubs-                 (\ x__ y__ -> x__{_DummyMessage'fSubs = y__}))-              Prelude.id-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f DummyMessage "fBool" (Prelude.Bool)-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _DummyMessage'fBool-                 (\ x__ y__ -> x__{_DummyMessage'fBool = y__}))-              Prelude.id-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f DummyMessage "fBools" ([Prelude.Bool])-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _DummyMessage'fBools-                 (\ x__ y__ -> x__{_DummyMessage'fBools = y__}))-              Prelude.id-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f DummyMessage "fInt64" (Data.Int.Int64)-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _DummyMessage'fInt64-                 (\ x__ y__ -> x__{_DummyMessage'fInt64 = y__}))-              Prelude.id-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f DummyMessage "fInt64s" ([Data.Int.Int64])-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _DummyMessage'fInt64s-                 (\ x__ y__ -> x__{_DummyMessage'fInt64s = y__}))-              Prelude.id-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f DummyMessage "fBytes"-           (Data.ByteString.ByteString)-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _DummyMessage'fBytes-                 (\ x__ y__ -> x__{_DummyMessage'fBytes = y__}))-              Prelude.id-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f DummyMessage "fBytess"-           ([Data.ByteString.ByteString])-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _DummyMessage'fBytess-                 (\ x__ y__ -> x__{_DummyMessage'fBytess = y__}))-              Prelude.id-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f DummyMessage "fFloat" (Prelude.Float)-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _DummyMessage'fFloat-                 (\ x__ y__ -> x__{_DummyMessage'fFloat = y__}))-              Prelude.id-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f DummyMessage "fFloats" ([Prelude.Float])-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _DummyMessage'fFloats-                 (\ x__ y__ -> x__{_DummyMessage'fFloats = y__}))-              Prelude.id-instance Data.Default.Class.Default DummyMessage where-        def-          = DummyMessage{_DummyMessage'fString = Data.ProtoLens.fieldDefault,-                         _DummyMessage'fStrings = [],-                         _DummyMessage'fInt32 = Data.ProtoLens.fieldDefault,-                         _DummyMessage'fInt32s = [],-                         _DummyMessage'fEnum = Data.Default.Class.def,-                         _DummyMessage'fEnums = [], _DummyMessage'fSub = Prelude.Nothing,-                         _DummyMessage'fSubs = [],-                         _DummyMessage'fBool = Data.ProtoLens.fieldDefault,-                         _DummyMessage'fBools = [],-                         _DummyMessage'fInt64 = Data.ProtoLens.fieldDefault,-                         _DummyMessage'fInt64s = [],-                         _DummyMessage'fBytes = Data.ProtoLens.fieldDefault,-                         _DummyMessage'fBytess = [],-                         _DummyMessage'fFloat = Data.ProtoLens.fieldDefault,-                         _DummyMessage'fFloats = [], _DummyMessage'_unknownFields = ([])}-instance Data.ProtoLens.Message DummyMessage where-        messageName _ = Data.Text.pack "grpcbin.DummyMessage"-        fieldsByTag-          = let fString__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "f_string"-                      (Data.ProtoLens.ScalarField Data.ProtoLens.StringField ::-                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)-                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fString")))-                      :: Data.ProtoLens.FieldDescriptor DummyMessage-                fStrings__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "f_strings"-                      (Data.ProtoLens.ScalarField Data.ProtoLens.StringField ::-                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)-                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fStrings")))-                      :: Data.ProtoLens.FieldDescriptor DummyMessage-                fInt32__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "f_int32"-                      (Data.ProtoLens.ScalarField Data.ProtoLens.Int32Field ::-                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)-                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fInt32")))-                      :: Data.ProtoLens.FieldDescriptor DummyMessage-                fInt32s__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "f_int32s"-                      (Data.ProtoLens.ScalarField Data.ProtoLens.Int32Field ::-                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)-                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Packed-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fInt32s")))-                      :: Data.ProtoLens.FieldDescriptor DummyMessage-                fEnum__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "f_enum"-                      (Data.ProtoLens.ScalarField Data.ProtoLens.EnumField ::-                         Data.ProtoLens.FieldTypeDescriptor DummyMessage'Enum)-                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fEnum")))-                      :: Data.ProtoLens.FieldDescriptor DummyMessage-                fEnums__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "f_enums"-                      (Data.ProtoLens.ScalarField Data.ProtoLens.EnumField ::-                         Data.ProtoLens.FieldTypeDescriptor DummyMessage'Enum)-                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Packed-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fEnums")))-                      :: Data.ProtoLens.FieldDescriptor DummyMessage-                fSub__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "f_sub"-                      (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::-                         Data.ProtoLens.FieldTypeDescriptor DummyMessage'Sub)-                      (Data.ProtoLens.OptionalField-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'fSub")))-                      :: Data.ProtoLens.FieldDescriptor DummyMessage-                fSubs__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "f_subs"-                      (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::-                         Data.ProtoLens.FieldTypeDescriptor DummyMessage'Sub)-                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fSubs")))-                      :: Data.ProtoLens.FieldDescriptor DummyMessage-                fBool__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "f_bool"-                      (Data.ProtoLens.ScalarField Data.ProtoLens.BoolField ::-                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)-                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fBool")))-                      :: Data.ProtoLens.FieldDescriptor DummyMessage-                fBools__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "f_bools"-                      (Data.ProtoLens.ScalarField Data.ProtoLens.BoolField ::-                         Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)-                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Packed-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fBools")))-                      :: Data.ProtoLens.FieldDescriptor DummyMessage-                fInt64__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "f_int64"-                      (Data.ProtoLens.ScalarField Data.ProtoLens.Int64Field ::-                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)-                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fInt64")))-                      :: Data.ProtoLens.FieldDescriptor DummyMessage-                fInt64s__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "f_int64s"-                      (Data.ProtoLens.ScalarField Data.ProtoLens.Int64Field ::-                         Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)-                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Packed-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fInt64s")))-                      :: Data.ProtoLens.FieldDescriptor DummyMessage-                fBytes__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "f_bytes"-                      (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::-                         Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)-                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fBytes")))-                      :: Data.ProtoLens.FieldDescriptor DummyMessage-                fBytess__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "f_bytess"-                      (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::-                         Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)-                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fBytess")))-                      :: Data.ProtoLens.FieldDescriptor DummyMessage-                fFloat__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "f_float"-                      (Data.ProtoLens.ScalarField Data.ProtoLens.FloatField ::-                         Data.ProtoLens.FieldTypeDescriptor Prelude.Float)-                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fFloat")))-                      :: Data.ProtoLens.FieldDescriptor DummyMessage-                fFloats__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "f_floats"-                      (Data.ProtoLens.ScalarField Data.ProtoLens.FloatField ::-                         Data.ProtoLens.FieldTypeDescriptor Prelude.Float)-                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Packed-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fFloats")))-                      :: Data.ProtoLens.FieldDescriptor DummyMessage-              in-              Data.Map.fromList-                [(Data.ProtoLens.Tag 1, fString__field_descriptor),-                 (Data.ProtoLens.Tag 2, fStrings__field_descriptor),-                 (Data.ProtoLens.Tag 3, fInt32__field_descriptor),-                 (Data.ProtoLens.Tag 4, fInt32s__field_descriptor),-                 (Data.ProtoLens.Tag 5, fEnum__field_descriptor),-                 (Data.ProtoLens.Tag 6, fEnums__field_descriptor),-                 (Data.ProtoLens.Tag 7, fSub__field_descriptor),-                 (Data.ProtoLens.Tag 8, fSubs__field_descriptor),-                 (Data.ProtoLens.Tag 9, fBool__field_descriptor),-                 (Data.ProtoLens.Tag 10, fBools__field_descriptor),-                 (Data.ProtoLens.Tag 11, fInt64__field_descriptor),-                 (Data.ProtoLens.Tag 12, fInt64s__field_descriptor),-                 (Data.ProtoLens.Tag 13, fBytes__field_descriptor),-                 (Data.ProtoLens.Tag 14, fBytess__field_descriptor),-                 (Data.ProtoLens.Tag 15, fFloat__field_descriptor),-                 (Data.ProtoLens.Tag 16, fFloats__field_descriptor)]-        unknownFields-          = Lens.Family2.Unchecked.lens _DummyMessage'_unknownFields-              (\ x__ y__ -> x__{_DummyMessage'_unknownFields = y__})-data DummyMessage'Enum = DummyMessage'ENUM_0-                       | DummyMessage'ENUM_1-                       | DummyMessage'ENUM_2-                       | DummyMessage'Enum'Unrecognized !DummyMessage'Enum'UnrecognizedValue-                           deriving (Prelude.Show, Prelude.Eq, Prelude.Ord)-newtype DummyMessage'Enum'UnrecognizedValue = DummyMessage'Enum'UnrecognizedValue Data.Int.Int32-                                                deriving (Prelude.Eq, Prelude.Ord, Prelude.Show)-instance Data.ProtoLens.MessageEnum DummyMessage'Enum where-        maybeToEnum 0 = Prelude.Just DummyMessage'ENUM_0-        maybeToEnum 1 = Prelude.Just DummyMessage'ENUM_1-        maybeToEnum 2 = Prelude.Just DummyMessage'ENUM_2-        maybeToEnum k-          = Prelude.Just-              (DummyMessage'Enum'Unrecognized-                 (DummyMessage'Enum'UnrecognizedValue (Prelude.fromIntegral k)))-        showEnum DummyMessage'ENUM_0 = "ENUM_0"-        showEnum DummyMessage'ENUM_1 = "ENUM_1"-        showEnum DummyMessage'ENUM_2 = "ENUM_2"-        showEnum-          (DummyMessage'Enum'Unrecognized-             (DummyMessage'Enum'UnrecognizedValue k))-          = Prelude.show k-        readEnum "ENUM_0" = Prelude.Just DummyMessage'ENUM_0-        readEnum "ENUM_1" = Prelude.Just DummyMessage'ENUM_1-        readEnum "ENUM_2" = Prelude.Just DummyMessage'ENUM_2-        readEnum k-          = (Prelude.>>=) (Text.Read.readMaybe k) Data.ProtoLens.maybeToEnum-instance Prelude.Bounded DummyMessage'Enum where-        minBound = DummyMessage'ENUM_0-        maxBound = DummyMessage'ENUM_2-instance Prelude.Enum DummyMessage'Enum where-        toEnum k__-          = Prelude.maybe-              (Prelude.error-                 ((Prelude.++) "toEnum: unknown value for enum Enum: "-                    (Prelude.show k__)))-              Prelude.id-              (Data.ProtoLens.maybeToEnum k__)-        fromEnum DummyMessage'ENUM_0 = 0-        fromEnum DummyMessage'ENUM_1 = 1-        fromEnum DummyMessage'ENUM_2 = 2-        fromEnum-          (DummyMessage'Enum'Unrecognized-             (DummyMessage'Enum'UnrecognizedValue k))-          = Prelude.fromIntegral k-        succ DummyMessage'ENUM_2-          = Prelude.error-              "DummyMessage'Enum.succ: bad argument DummyMessage'ENUM_2. This value would be out of bounds."-        succ DummyMessage'ENUM_0 = DummyMessage'ENUM_1-        succ DummyMessage'ENUM_1 = DummyMessage'ENUM_2-        succ _-          = Prelude.error-              "DummyMessage'Enum.succ: bad argument: unrecognized value"-        pred DummyMessage'ENUM_0-          = Prelude.error-              "DummyMessage'Enum.pred: bad argument DummyMessage'ENUM_0. This value would be out of bounds."-        pred DummyMessage'ENUM_1 = DummyMessage'ENUM_0-        pred DummyMessage'ENUM_2 = DummyMessage'ENUM_1-        pred _-          = Prelude.error-              "DummyMessage'Enum.pred: bad argument: unrecognized value"-        enumFrom = Data.ProtoLens.Message.Enum.messageEnumFrom-        enumFromTo = Data.ProtoLens.Message.Enum.messageEnumFromTo-        enumFromThen = Data.ProtoLens.Message.Enum.messageEnumFromThen-        enumFromThenTo = Data.ProtoLens.Message.Enum.messageEnumFromThenTo-instance Data.Default.Class.Default DummyMessage'Enum where-        def = DummyMessage'ENUM_0-instance Data.ProtoLens.FieldDefault DummyMessage'Enum where-        fieldDefault = DummyMessage'ENUM_0-{- | Fields :--    * 'Proto.Protos.Grpcbin_Fields.fString' @:: Lens' DummyMessage'Sub Data.Text.Text@- -}-data DummyMessage'Sub = DummyMessage'Sub{_DummyMessage'Sub'fString-                                         :: !Data.Text.Text,-                                         _DummyMessage'Sub'_unknownFields ::-                                         !Data.ProtoLens.FieldSet}-                          deriving (Prelude.Show, Prelude.Eq, Prelude.Ord)-instance (Lens.Labels.HasLens' f DummyMessage'Sub x a, a ~ b) =>-         Lens.Labels.HasLens f DummyMessage'Sub DummyMessage'Sub x a b-         where-        lensOf = Lens.Labels.lensOf'-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f DummyMessage'Sub "fString" (Data.Text.Text)-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _DummyMessage'Sub'fString-                 (\ x__ y__ -> x__{_DummyMessage'Sub'fString = y__}))-              Prelude.id-instance Data.Default.Class.Default DummyMessage'Sub where-        def-          = DummyMessage'Sub{_DummyMessage'Sub'fString =-                               Data.ProtoLens.fieldDefault,-                             _DummyMessage'Sub'_unknownFields = ([])}-instance Data.ProtoLens.Message DummyMessage'Sub where-        messageName _ = Data.Text.pack "grpcbin.DummyMessage.Sub"-        fieldsByTag-          = let fString__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "f_string"-                      (Data.ProtoLens.ScalarField Data.ProtoLens.StringField ::-                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)-                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fString")))-                      :: Data.ProtoLens.FieldDescriptor DummyMessage'Sub-              in-              Data.Map.fromList-                [(Data.ProtoLens.Tag 1, fString__field_descriptor)]-        unknownFields-          = Lens.Family2.Unchecked.lens _DummyMessage'Sub'_unknownFields-              (\ x__ y__ -> x__{_DummyMessage'Sub'_unknownFields = y__})-{- | Fields :-- -}-data EmptyMessage = EmptyMessage{_EmptyMessage'_unknownFields ::-                                 !Data.ProtoLens.FieldSet}-                      deriving (Prelude.Show, Prelude.Eq, Prelude.Ord)-instance (Lens.Labels.HasLens' f EmptyMessage x a, a ~ b) =>-         Lens.Labels.HasLens f EmptyMessage EmptyMessage x a b-         where-        lensOf = Lens.Labels.lensOf'-instance Data.Default.Class.Default EmptyMessage where-        def = EmptyMessage{_EmptyMessage'_unknownFields = ([])}-instance Data.ProtoLens.Message EmptyMessage where-        messageName _ = Data.Text.pack "grpcbin.EmptyMessage"-        fieldsByTag = let in Data.Map.fromList []-        unknownFields-          = Lens.Family2.Unchecked.lens _EmptyMessage'_unknownFields-              (\ x__ y__ -> x__{_EmptyMessage'_unknownFields = y__})-{- | Fields :--    * 'Proto.Protos.Grpcbin_Fields.metadata' @:: Lens' HeadersMessage-  (Data.Map.Map Data.Text.Text HeadersMessage'Values)@- -}-data HeadersMessage = HeadersMessage{_HeadersMessage'metadata ::-                                     !(Data.Map.Map Data.Text.Text HeadersMessage'Values),-                                     _HeadersMessage'_unknownFields :: !Data.ProtoLens.FieldSet}-                        deriving (Prelude.Show, Prelude.Eq, Prelude.Ord)-instance (Lens.Labels.HasLens' f HeadersMessage x a, a ~ b) =>-         Lens.Labels.HasLens f HeadersMessage HeadersMessage x a b-         where-        lensOf = Lens.Labels.lensOf'-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f HeadersMessage "metadata"-           (Data.Map.Map Data.Text.Text HeadersMessage'Values)-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _HeadersMessage'metadata-                 (\ x__ y__ -> x__{_HeadersMessage'metadata = y__}))-              Prelude.id-instance Data.Default.Class.Default HeadersMessage where-        def-          = HeadersMessage{_HeadersMessage'metadata = Data.Map.empty,-                           _HeadersMessage'_unknownFields = ([])}-instance Data.ProtoLens.Message HeadersMessage where-        messageName _ = Data.Text.pack "grpcbin.HeadersMessage"-        fieldsByTag-          = let metadata__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "Metadata"-                      (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::-                         Data.ProtoLens.FieldTypeDescriptor HeadersMessage'MetadataEntry)-                      (Data.ProtoLens.MapField-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "key"))-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "value"))-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "metadata")))-                      :: Data.ProtoLens.FieldDescriptor HeadersMessage-              in-              Data.Map.fromList-                [(Data.ProtoLens.Tag 1, metadata__field_descriptor)]-        unknownFields-          = Lens.Family2.Unchecked.lens _HeadersMessage'_unknownFields-              (\ x__ y__ -> x__{_HeadersMessage'_unknownFields = y__})-{- | Fields :--    * 'Proto.Protos.Grpcbin_Fields.key' @:: Lens' HeadersMessage'MetadataEntry Data.Text.Text@-    * 'Proto.Protos.Grpcbin_Fields.value' @:: Lens' HeadersMessage'MetadataEntry HeadersMessage'Values@-    * 'Proto.Protos.Grpcbin_Fields.maybe'value' @:: Lens' HeadersMessage'MetadataEntry-  (Prelude.Maybe HeadersMessage'Values)@- -}-data HeadersMessage'MetadataEntry = HeadersMessage'MetadataEntry{_HeadersMessage'MetadataEntry'key-                                                                 :: !Data.Text.Text,-                                                                 _HeadersMessage'MetadataEntry'value-                                                                 ::-                                                                 !(Prelude.Maybe-                                                                     HeadersMessage'Values),-                                                                 _HeadersMessage'MetadataEntry'_unknownFields-                                                                 :: !Data.ProtoLens.FieldSet}-                                      deriving (Prelude.Show, Prelude.Eq, Prelude.Ord)-instance (Lens.Labels.HasLens' f HeadersMessage'MetadataEntry x a,-          a ~ b) =>-         Lens.Labels.HasLens f HeadersMessage'MetadataEntry-           HeadersMessage'MetadataEntry-           x-           a-           b-         where-        lensOf = Lens.Labels.lensOf'-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f HeadersMessage'MetadataEntry "key"-           (Data.Text.Text)-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _HeadersMessage'MetadataEntry'key-                 (\ x__ y__ -> x__{_HeadersMessage'MetadataEntry'key = y__}))-              Prelude.id-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f HeadersMessage'MetadataEntry "value"-           (HeadersMessage'Values)-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _HeadersMessage'MetadataEntry'value-                 (\ x__ y__ -> x__{_HeadersMessage'MetadataEntry'value = y__}))-              (Data.ProtoLens.maybeLens Data.Default.Class.def)-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f HeadersMessage'MetadataEntry "maybe'value"-           (Prelude.Maybe HeadersMessage'Values)-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _HeadersMessage'MetadataEntry'value-                 (\ x__ y__ -> x__{_HeadersMessage'MetadataEntry'value = y__}))-              Prelude.id-instance Data.Default.Class.Default HeadersMessage'MetadataEntry-         where-        def-          = HeadersMessage'MetadataEntry{_HeadersMessage'MetadataEntry'key =-                                           Data.ProtoLens.fieldDefault,-                                         _HeadersMessage'MetadataEntry'value = Prelude.Nothing,-                                         _HeadersMessage'MetadataEntry'_unknownFields = ([])}-instance Data.ProtoLens.Message HeadersMessage'MetadataEntry where-        messageName _-          = Data.Text.pack "grpcbin.HeadersMessage.MetadataEntry"-        fieldsByTag-          = let key__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "key"-                      (Data.ProtoLens.ScalarField Data.ProtoLens.StringField ::-                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)-                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "key")))-                      :: Data.ProtoLens.FieldDescriptor HeadersMessage'MetadataEntry-                value__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "value"-                      (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::-                         Data.ProtoLens.FieldTypeDescriptor HeadersMessage'Values)-                      (Data.ProtoLens.OptionalField-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'value")))-                      :: Data.ProtoLens.FieldDescriptor HeadersMessage'MetadataEntry-              in-              Data.Map.fromList-                [(Data.ProtoLens.Tag 1, key__field_descriptor),-                 (Data.ProtoLens.Tag 2, value__field_descriptor)]-        unknownFields-          = Lens.Family2.Unchecked.lens-              _HeadersMessage'MetadataEntry'_unknownFields-              (\ x__ y__ ->-                 x__{_HeadersMessage'MetadataEntry'_unknownFields = y__})-{- | Fields :--    * 'Proto.Protos.Grpcbin_Fields.values' @:: Lens' HeadersMessage'Values [Data.Text.Text]@- -}-data HeadersMessage'Values = HeadersMessage'Values{_HeadersMessage'Values'values-                                                   :: ![Data.Text.Text],-                                                   _HeadersMessage'Values'_unknownFields ::-                                                   !Data.ProtoLens.FieldSet}-                               deriving (Prelude.Show, Prelude.Eq, Prelude.Ord)-instance (Lens.Labels.HasLens' f HeadersMessage'Values x a,-          a ~ b) =>-         Lens.Labels.HasLens f HeadersMessage'Values HeadersMessage'Values x-           a-           b-         where-        lensOf = Lens.Labels.lensOf'-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f HeadersMessage'Values "values"-           ([Data.Text.Text])-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _HeadersMessage'Values'values-                 (\ x__ y__ -> x__{_HeadersMessage'Values'values = y__}))-              Prelude.id-instance Data.Default.Class.Default HeadersMessage'Values where-        def-          = HeadersMessage'Values{_HeadersMessage'Values'values = [],-                                  _HeadersMessage'Values'_unknownFields = ([])}-instance Data.ProtoLens.Message HeadersMessage'Values where-        messageName _ = Data.Text.pack "grpcbin.HeadersMessage.Values"-        fieldsByTag-          = let values__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "values"-                      (Data.ProtoLens.ScalarField Data.ProtoLens.StringField ::-                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)-                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "values")))-                      :: Data.ProtoLens.FieldDescriptor HeadersMessage'Values-              in-              Data.Map.fromList-                [(Data.ProtoLens.Tag 1, values__field_descriptor)]-        unknownFields-          = Lens.Family2.Unchecked.lens _HeadersMessage'Values'_unknownFields-              (\ x__ y__ -> x__{_HeadersMessage'Values'_unknownFields = y__})-{- | Fields :--    * 'Proto.Protos.Grpcbin_Fields.description' @:: Lens' IndexReply Data.Text.Text@-    * 'Proto.Protos.Grpcbin_Fields.endpoints' @:: Lens' IndexReply [IndexReply'Endpoint]@- -}-data IndexReply = IndexReply{_IndexReply'description ::-                             !Data.Text.Text,-                             _IndexReply'endpoints :: ![IndexReply'Endpoint],-                             _IndexReply'_unknownFields :: !Data.ProtoLens.FieldSet}-                    deriving (Prelude.Show, Prelude.Eq, Prelude.Ord)-instance (Lens.Labels.HasLens' f IndexReply x a, a ~ b) =>-         Lens.Labels.HasLens f IndexReply IndexReply x a b-         where-        lensOf = Lens.Labels.lensOf'-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f IndexReply "description" (Data.Text.Text)-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _IndexReply'description-                 (\ x__ y__ -> x__{_IndexReply'description = y__}))-              Prelude.id-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f IndexReply "endpoints"-           ([IndexReply'Endpoint])-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _IndexReply'endpoints-                 (\ x__ y__ -> x__{_IndexReply'endpoints = y__}))-              Prelude.id-instance Data.Default.Class.Default IndexReply where-        def-          = IndexReply{_IndexReply'description = Data.ProtoLens.fieldDefault,-                       _IndexReply'endpoints = [], _IndexReply'_unknownFields = ([])}-instance Data.ProtoLens.Message IndexReply where-        messageName _ = Data.Text.pack "grpcbin.IndexReply"-        fieldsByTag-          = let description__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "description"-                      (Data.ProtoLens.ScalarField Data.ProtoLens.StringField ::-                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)-                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "description")))-                      :: Data.ProtoLens.FieldDescriptor IndexReply-                endpoints__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "endpoints"-                      (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::-                         Data.ProtoLens.FieldTypeDescriptor IndexReply'Endpoint)-                      (Data.ProtoLens.RepeatedField Data.ProtoLens.Unpacked-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "endpoints")))-                      :: Data.ProtoLens.FieldDescriptor IndexReply-              in-              Data.Map.fromList-                [(Data.ProtoLens.Tag 1, description__field_descriptor),-                 (Data.ProtoLens.Tag 2, endpoints__field_descriptor)]-        unknownFields-          = Lens.Family2.Unchecked.lens _IndexReply'_unknownFields-              (\ x__ y__ -> x__{_IndexReply'_unknownFields = y__})-{- | Fields :--    * 'Proto.Protos.Grpcbin_Fields.path' @:: Lens' IndexReply'Endpoint Data.Text.Text@-    * 'Proto.Protos.Grpcbin_Fields.description' @:: Lens' IndexReply'Endpoint Data.Text.Text@- -}-data IndexReply'Endpoint = IndexReply'Endpoint{_IndexReply'Endpoint'path-                                               :: !Data.Text.Text,-                                               _IndexReply'Endpoint'description :: !Data.Text.Text,-                                               _IndexReply'Endpoint'_unknownFields ::-                                               !Data.ProtoLens.FieldSet}-                             deriving (Prelude.Show, Prelude.Eq, Prelude.Ord)-instance (Lens.Labels.HasLens' f IndexReply'Endpoint x a, a ~ b) =>-         Lens.Labels.HasLens f IndexReply'Endpoint IndexReply'Endpoint x a b-         where-        lensOf = Lens.Labels.lensOf'-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f IndexReply'Endpoint "path" (Data.Text.Text)-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _IndexReply'Endpoint'path-                 (\ x__ y__ -> x__{_IndexReply'Endpoint'path = y__}))-              Prelude.id-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f IndexReply'Endpoint "description"-           (Data.Text.Text)-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _IndexReply'Endpoint'description-                 (\ x__ y__ -> x__{_IndexReply'Endpoint'description = y__}))-              Prelude.id-instance Data.Default.Class.Default IndexReply'Endpoint where-        def-          = IndexReply'Endpoint{_IndexReply'Endpoint'path =-                                  Data.ProtoLens.fieldDefault,-                                _IndexReply'Endpoint'description = Data.ProtoLens.fieldDefault,-                                _IndexReply'Endpoint'_unknownFields = ([])}-instance Data.ProtoLens.Message IndexReply'Endpoint where-        messageName _ = Data.Text.pack "grpcbin.IndexReply.Endpoint"-        fieldsByTag-          = let path__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "path"-                      (Data.ProtoLens.ScalarField Data.ProtoLens.StringField ::-                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)-                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "path")))-                      :: Data.ProtoLens.FieldDescriptor IndexReply'Endpoint-                description__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "description"-                      (Data.ProtoLens.ScalarField Data.ProtoLens.StringField ::-                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)-                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "description")))-                      :: Data.ProtoLens.FieldDescriptor IndexReply'Endpoint-              in-              Data.Map.fromList-                [(Data.ProtoLens.Tag 1, path__field_descriptor),-                 (Data.ProtoLens.Tag 2, description__field_descriptor)]-        unknownFields-          = Lens.Family2.Unchecked.lens _IndexReply'Endpoint'_unknownFields-              (\ x__ y__ -> x__{_IndexReply'Endpoint'_unknownFields = y__})-{- | Fields :--    * 'Proto.Protos.Grpcbin_Fields.code' @:: Lens' SpecificErrorRequest Data.Word.Word32@-    * 'Proto.Protos.Grpcbin_Fields.reason' @:: Lens' SpecificErrorRequest Data.Text.Text@- -}-data SpecificErrorRequest = SpecificErrorRequest{_SpecificErrorRequest'code-                                                 :: !Data.Word.Word32,-                                                 _SpecificErrorRequest'reason :: !Data.Text.Text,-                                                 _SpecificErrorRequest'_unknownFields ::-                                                 !Data.ProtoLens.FieldSet}-                              deriving (Prelude.Show, Prelude.Eq, Prelude.Ord)-instance (Lens.Labels.HasLens' f SpecificErrorRequest x a,-          a ~ b) =>-         Lens.Labels.HasLens f SpecificErrorRequest SpecificErrorRequest x a-           b-         where-        lensOf = Lens.Labels.lensOf'-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f SpecificErrorRequest "code"-           (Data.Word.Word32)-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _SpecificErrorRequest'code-                 (\ x__ y__ -> x__{_SpecificErrorRequest'code = y__}))-              Prelude.id-instance Prelude.Functor f =>-         Lens.Labels.HasLens' f SpecificErrorRequest "reason"-           (Data.Text.Text)-         where-        lensOf' _-          = (Prelude..)-              (Lens.Family2.Unchecked.lens _SpecificErrorRequest'reason-                 (\ x__ y__ -> x__{_SpecificErrorRequest'reason = y__}))-              Prelude.id-instance Data.Default.Class.Default SpecificErrorRequest where-        def-          = SpecificErrorRequest{_SpecificErrorRequest'code =-                                   Data.ProtoLens.fieldDefault,-                                 _SpecificErrorRequest'reason = Data.ProtoLens.fieldDefault,-                                 _SpecificErrorRequest'_unknownFields = ([])}-instance Data.ProtoLens.Message SpecificErrorRequest where-        messageName _ = Data.Text.pack "grpcbin.SpecificErrorRequest"-        fieldsByTag-          = let code__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "code"-                      (Data.ProtoLens.ScalarField Data.ProtoLens.UInt32Field ::-                         Data.ProtoLens.FieldTypeDescriptor Data.Word.Word32)-                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "code")))-                      :: Data.ProtoLens.FieldDescriptor SpecificErrorRequest-                reason__field_descriptor-                  = Data.ProtoLens.FieldDescriptor "reason"-                      (Data.ProtoLens.ScalarField Data.ProtoLens.StringField ::-                         Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)-                      (Data.ProtoLens.PlainField Data.ProtoLens.Optional-                         (Lens.Labels.lensOf-                            ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "reason")))-                      :: Data.ProtoLens.FieldDescriptor SpecificErrorRequest-              in-              Data.Map.fromList-                [(Data.ProtoLens.Tag 1, code__field_descriptor),-                 (Data.ProtoLens.Tag 2, reason__field_descriptor)]-        unknownFields-          = Lens.Family2.Unchecked.lens _SpecificErrorRequest'_unknownFields-              (\ x__ y__ -> x__{_SpecificErrorRequest'_unknownFields = y__})-data GRPCBin = GRPCBin{}-                 deriving ()-instance Data.ProtoLens.Service.Types.Service GRPCBin where-        type ServiceName GRPCBin = "GRPCBin"-        type ServicePackage GRPCBin = "grpcbin"-        type ServiceMethods GRPCBin =-             '["dummyBidirectionalStreamStream", "dummyClientStream",-               "dummyServerStream", "dummyUnary", "empty", "headersUnary",-               "index", "noResponseUnary", "randomError", "specificError"]-instance Data.ProtoLens.Service.Types.HasMethodImpl GRPCBin "index"-         where-        type MethodName GRPCBin "index" = "Index"-        type MethodInput GRPCBin "index" = EmptyMessage-        type MethodOutput GRPCBin "index" = IndexReply-        type MethodStreamingType GRPCBin "index" =-             'Data.ProtoLens.Service.Types.NonStreaming-instance Data.ProtoLens.Service.Types.HasMethodImpl GRPCBin "empty"-         where-        type MethodName GRPCBin "empty" = "Empty"-        type MethodInput GRPCBin "empty" = EmptyMessage-        type MethodOutput GRPCBin "empty" = EmptyMessage-        type MethodStreamingType GRPCBin "empty" =-             'Data.ProtoLens.Service.Types.NonStreaming-instance Data.ProtoLens.Service.Types.HasMethodImpl GRPCBin-           "dummyUnary"-         where-        type MethodName GRPCBin "dummyUnary" = "DummyUnary"-        type MethodInput GRPCBin "dummyUnary" = DummyMessage-        type MethodOutput GRPCBin "dummyUnary" = DummyMessage-        type MethodStreamingType GRPCBin "dummyUnary" =-             'Data.ProtoLens.Service.Types.NonStreaming-instance Data.ProtoLens.Service.Types.HasMethodImpl GRPCBin-           "dummyServerStream"-         where-        type MethodName GRPCBin "dummyServerStream" = "DummyServerStream"-        type MethodInput GRPCBin "dummyServerStream" = DummyMessage-        type MethodOutput GRPCBin "dummyServerStream" = DummyMessage-        type MethodStreamingType GRPCBin "dummyServerStream" =-             'Data.ProtoLens.Service.Types.ServerStreaming-instance Data.ProtoLens.Service.Types.HasMethodImpl GRPCBin-           "dummyClientStream"-         where-        type MethodName GRPCBin "dummyClientStream" = "DummyClientStream"-        type MethodInput GRPCBin "dummyClientStream" = DummyMessage-        type MethodOutput GRPCBin "dummyClientStream" = DummyMessage-        type MethodStreamingType GRPCBin "dummyClientStream" =-             'Data.ProtoLens.Service.Types.ClientStreaming-instance Data.ProtoLens.Service.Types.HasMethodImpl GRPCBin-           "dummyBidirectionalStreamStream"-         where-        type MethodName GRPCBin "dummyBidirectionalStreamStream" =-             "DummyBidirectionalStreamStream"-        type MethodInput GRPCBin "dummyBidirectionalStreamStream" =-             DummyMessage-        type MethodOutput GRPCBin "dummyBidirectionalStreamStream" =-             DummyMessage-        type MethodStreamingType GRPCBin "dummyBidirectionalStreamStream" =-             'Data.ProtoLens.Service.Types.BiDiStreaming-instance Data.ProtoLens.Service.Types.HasMethodImpl GRPCBin-           "specificError"-         where-        type MethodName GRPCBin "specificError" = "SpecificError"-        type MethodInput GRPCBin "specificError" = SpecificErrorRequest-        type MethodOutput GRPCBin "specificError" = EmptyMessage-        type MethodStreamingType GRPCBin "specificError" =-             'Data.ProtoLens.Service.Types.NonStreaming-instance Data.ProtoLens.Service.Types.HasMethodImpl GRPCBin-           "randomError"-         where-        type MethodName GRPCBin "randomError" = "RandomError"-        type MethodInput GRPCBin "randomError" = EmptyMessage-        type MethodOutput GRPCBin "randomError" = EmptyMessage-        type MethodStreamingType GRPCBin "randomError" =-             'Data.ProtoLens.Service.Types.NonStreaming-instance Data.ProtoLens.Service.Types.HasMethodImpl GRPCBin-           "headersUnary"-         where-        type MethodName GRPCBin "headersUnary" = "HeadersUnary"-        type MethodInput GRPCBin "headersUnary" = EmptyMessage-        type MethodOutput GRPCBin "headersUnary" = HeadersMessage-        type MethodStreamingType GRPCBin "headersUnary" =-             'Data.ProtoLens.Service.Types.NonStreaming-instance Data.ProtoLens.Service.Types.HasMethodImpl GRPCBin-           "noResponseUnary"-         where-        type MethodName GRPCBin "noResponseUnary" = "NoResponseUnary"-        type MethodInput GRPCBin "noResponseUnary" = EmptyMessage-        type MethodOutput GRPCBin "noResponseUnary" = EmptyMessage-        type MethodStreamingType GRPCBin "noResponseUnary" =-             'Data.ProtoLens.Service.Types.NonStreaming
− gen/Proto/Protos/Grpcbin_Fields.hs
@@ -1,196 +0,0 @@-{- This file was auto-generated from protos/grpcbin.proto by the proto-lens-protoc program. -}-{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies,-  UndecidableInstances, GeneralizedNewtypeDeriving,-  MultiParamTypeClasses, FlexibleContexts, FlexibleInstances,-  PatternSynonyms, MagicHash, NoImplicitPrelude, DataKinds #-}-{-# OPTIONS_GHC -fno-warn-unused-imports#-}-{-# OPTIONS_GHC -fno-warn-duplicate-exports#-}-module Proto.Protos.Grpcbin_Fields where-import qualified Data.ProtoLens.Reexport.Prelude as Prelude-import qualified Data.ProtoLens.Reexport.Data.Int as Data.Int-import qualified Data.ProtoLens.Reexport.Data.Word as Data.Word-import qualified Data.ProtoLens.Reexport.Data.ProtoLens-       as Data.ProtoLens-import qualified-       Data.ProtoLens.Reexport.Data.ProtoLens.Message.Enum-       as Data.ProtoLens.Message.Enum-import qualified-       Data.ProtoLens.Reexport.Data.ProtoLens.Service.Types-       as Data.ProtoLens.Service.Types-import qualified Data.ProtoLens.Reexport.Lens.Family2-       as Lens.Family2-import qualified Data.ProtoLens.Reexport.Lens.Family2.Unchecked-       as Lens.Family2.Unchecked-import qualified Data.ProtoLens.Reexport.Data.Default.Class-       as Data.Default.Class-import qualified Data.ProtoLens.Reexport.Data.Text as Data.Text-import qualified Data.ProtoLens.Reexport.Data.Map as Data.Map-import qualified Data.ProtoLens.Reexport.Data.ByteString-       as Data.ByteString-import qualified Data.ProtoLens.Reexport.Data.ByteString.Char8-       as Data.ByteString.Char8-import qualified Data.ProtoLens.Reexport.Lens.Labels as Lens.Labels-import qualified Data.ProtoLens.Reexport.Text.Read as Text.Read--code ::-     forall f s t a b . (Lens.Labels.HasLens f s t "code" a b) =>-       Lens.Family2.LensLike f s t a b-code-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "code")-description ::-            forall f s t a b . (Lens.Labels.HasLens f s t "description" a b) =>-              Lens.Family2.LensLike f s t a b-description-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "description")-endpoints ::-          forall f s t a b . (Lens.Labels.HasLens f s t "endpoints" a b) =>-            Lens.Family2.LensLike f s t a b-endpoints-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "endpoints")-fBool ::-      forall f s t a b . (Lens.Labels.HasLens f s t "fBool" a b) =>-        Lens.Family2.LensLike f s t a b-fBool-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fBool")-fBools ::-       forall f s t a b . (Lens.Labels.HasLens f s t "fBools" a b) =>-         Lens.Family2.LensLike f s t a b-fBools-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fBools")-fBytes ::-       forall f s t a b . (Lens.Labels.HasLens f s t "fBytes" a b) =>-         Lens.Family2.LensLike f s t a b-fBytes-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fBytes")-fBytess ::-        forall f s t a b . (Lens.Labels.HasLens f s t "fBytess" a b) =>-          Lens.Family2.LensLike f s t a b-fBytess-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fBytess")-fEnum ::-      forall f s t a b . (Lens.Labels.HasLens f s t "fEnum" a b) =>-        Lens.Family2.LensLike f s t a b-fEnum-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fEnum")-fEnums ::-       forall f s t a b . (Lens.Labels.HasLens f s t "fEnums" a b) =>-         Lens.Family2.LensLike f s t a b-fEnums-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fEnums")-fFloat ::-       forall f s t a b . (Lens.Labels.HasLens f s t "fFloat" a b) =>-         Lens.Family2.LensLike f s t a b-fFloat-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fFloat")-fFloats ::-        forall f s t a b . (Lens.Labels.HasLens f s t "fFloats" a b) =>-          Lens.Family2.LensLike f s t a b-fFloats-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fFloats")-fInt32 ::-       forall f s t a b . (Lens.Labels.HasLens f s t "fInt32" a b) =>-         Lens.Family2.LensLike f s t a b-fInt32-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fInt32")-fInt32s ::-        forall f s t a b . (Lens.Labels.HasLens f s t "fInt32s" a b) =>-          Lens.Family2.LensLike f s t a b-fInt32s-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fInt32s")-fInt64 ::-       forall f s t a b . (Lens.Labels.HasLens f s t "fInt64" a b) =>-         Lens.Family2.LensLike f s t a b-fInt64-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fInt64")-fInt64s ::-        forall f s t a b . (Lens.Labels.HasLens f s t "fInt64s" a b) =>-          Lens.Family2.LensLike f s t a b-fInt64s-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fInt64s")-fString ::-        forall f s t a b . (Lens.Labels.HasLens f s t "fString" a b) =>-          Lens.Family2.LensLike f s t a b-fString-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fString")-fStrings ::-         forall f s t a b . (Lens.Labels.HasLens f s t "fStrings" a b) =>-           Lens.Family2.LensLike f s t a b-fStrings-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fStrings")-fSub ::-     forall f s t a b . (Lens.Labels.HasLens f s t "fSub" a b) =>-       Lens.Family2.LensLike f s t a b-fSub-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fSub")-fSubs ::-      forall f s t a b . (Lens.Labels.HasLens f s t "fSubs" a b) =>-        Lens.Family2.LensLike f s t a b-fSubs-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "fSubs")-key ::-    forall f s t a b . (Lens.Labels.HasLens f s t "key" a b) =>-      Lens.Family2.LensLike f s t a b-key-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "key")-maybe'fSub ::-           forall f s t a b . (Lens.Labels.HasLens f s t "maybe'fSub" a b) =>-             Lens.Family2.LensLike f s t a b-maybe'fSub-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'fSub")-maybe'value ::-            forall f s t a b . (Lens.Labels.HasLens f s t "maybe'value" a b) =>-              Lens.Family2.LensLike f s t a b-maybe'value-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "maybe'value")-metadata ::-         forall f s t a b . (Lens.Labels.HasLens f s t "metadata" a b) =>-           Lens.Family2.LensLike f s t a b-metadata-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "metadata")-path ::-     forall f s t a b . (Lens.Labels.HasLens f s t "path" a b) =>-       Lens.Family2.LensLike f s t a b-path-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "path")-reason ::-       forall f s t a b . (Lens.Labels.HasLens f s t "reason" a b) =>-         Lens.Family2.LensLike f s t a b-reason-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "reason")-value ::-      forall f s t a b . (Lens.Labels.HasLens f s t "value" a b) =>-        Lens.Family2.LensLike f s t a b-value-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "value")-values ::-       forall f s t a b . (Lens.Labels.HasLens f s t "values" a b) =>-         Lens.Family2.LensLike f s t a b-values-  = Lens.Labels.lensOf-      ((Lens.Labels.proxy#) :: (Lens.Labels.Proxy#) "values")
src/Network/GRPC/Server/Handlers.hs view
@@ -1,6 +1,8 @@+{-# LANGUAGE DataKinds #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TypeFamilies #-} module Network.GRPC.Server.Handlers where  import           Data.Binary.Get (pushChunk, Decoder(..))@@ -8,7 +10,7 @@ import           Data.ByteString.Char8 (ByteString) import           Data.ByteString.Lazy (toStrict) import           Data.ProtoLens.Message (Message)-import           Data.ProtoLens.Service.Types (Service(..), HasMethod, HasMethodImpl(..))+import           Data.ProtoLens.Service.Types (Service(..), HasMethod, HasMethodImpl(..), StreamingType(..)) import           Network.GRPC.HTTP2.Encoding (decodeInput, encodeOutput, Encoding(..), Decoding(..)) import           Network.GRPC.HTTP2.Types (RPC(..), GRPCStatus(..), GRPCStatusCode(..), path) import           Network.Wai (Request, requestBody, strictRequestBody)@@ -55,7 +57,7 @@  -- | Construct a handler for handling a server-streaming RPC. serverStream-  :: (Service s, HasMethod s m)+  :: (Service s, HasMethod s m,  MethodStreamingType s m ~ ServerStreaming)   => RPC s m   -> ServerStreamHandler s m a   -> ServiceHandler@@ -64,7 +66,7 @@  -- | Construct a handler for handling a client-streaming RPC. clientStream-  :: (Service s, HasMethod s m)+  :: (Service s, HasMethod s m,  MethodStreamingType s m ~ ClientStreaming)   => RPC s m   -> ClientStreamHandler s m a   -> ServiceHandler
− test/Spec.hs
@@ -1,2 +0,0 @@-main :: IO ()-main = putStrLn "Test suite not yet implemented"
warp-grpc.cabal view
@@ -2,10 +2,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: d116fcb32e265f228bd3deb1c4665cd8477e5dd7fa46ea0b2af4d678c06c0fc6+-- hash: 8efcb911f721906dd0ee653337e980b0266f19252c57128f28973006f8bdd00e  name:           warp-grpc-version:        0.1.0.0+version:        0.1.0.1 synopsis:       A minimal gRPC server on top of Warp. description:    Please see the README on Github at <https://github.com/githubuser/warp-grpc#readme> category:       Networking@@ -46,51 +46,5 @@     , proto-lens     , wai     , warp >=3.2.24 && <3.3-    , warp-tls-  default-language: Haskell2010--executable warp-grpc-exe-  main-is: Main.hs-  other-modules:-      Proto.Protos.Grpcbin-      Proto.Protos.Grpcbin_Fields-  hs-source-dirs:-      app-      gen-  ghc-options: -threaded -rtsopts -with-rtsopts=-N-  build-depends:-      base >=4.7 && <5-    , binary-    , bytestring-    , case-insensitive-    , http-types-    , http2-grpc-types >=0.2-    , proto-lens-    , proto-lens-protoc-    , wai-    , warp >=3.2.24 && <3.3-    , warp-grpc-    , warp-tls-  default-language: Haskell2010--test-suite warp-grpc-test-  type: exitcode-stdio-1.0-  main-is: Spec.hs-  other-modules:-      Paths_warp_grpc-  hs-source-dirs:-      test-  ghc-options: -threaded -rtsopts -with-rtsopts=-N-  build-depends:-      base >=4.7 && <5-    , binary-    , bytestring-    , case-insensitive-    , http-types-    , http2-grpc-types >=0.2-    , proto-lens-    , wai-    , warp >=3.2.24 && <3.3-    , warp-grpc     , warp-tls   default-language: Haskell2010