mirror of
https://github.com/unclechu/gRPC-haskell.git
synced 2024-11-06 03:09:42 +01:00
9a3be32ed7
* echo client/server example: dead code removal, add command line params, improve output messages * Add nix-build result to .gitignore * Merge echo-client and echo-server directories to echo-hs/ directory; rename main modules accordingly * Use our protobuf compiler to generate bindings for the Echo service * Simplify echo.proto to just one endpoint; use highlevel client/server interfaces and codegen for echo example * Remove repetition counts and thread spawns from echo client, parameterize payload * Update default.nix
48 lines
2.1 KiB
Haskell
48 lines
2.1 KiB
Haskell
{-# LANGUAGE DataKinds #-}
|
|
{-# LANGUAGE DeriveGeneric #-}
|
|
{-# LANGUAGE GADTs #-}
|
|
{-# LANGUAGE LambdaCase #-}
|
|
{-# LANGUAGE OverloadedLists #-}
|
|
{-# LANGUAGE OverloadedStrings #-}
|
|
{-# LANGUAGE RecordWildCards #-}
|
|
{-# LANGUAGE TypeOperators #-}
|
|
|
|
import Control.Monad
|
|
import Data.ByteString (ByteString)
|
|
import Data.Maybe (fromMaybe)
|
|
import GHC.Generics (Generic)
|
|
import Network.GRPC.HighLevel.Client
|
|
import Network.GRPC.HighLevel.Generated
|
|
import Network.GRPC.LowLevel
|
|
import Options.Generic
|
|
import Prelude hiding (FilePath)
|
|
|
|
import Echo
|
|
|
|
data Args = Args
|
|
{ bind :: Maybe ByteString <?> "grpc endpoint hostname (default \"localhost\")"
|
|
, port :: Maybe Int <?> "grpc endpoint port (default 50051)"
|
|
, payload :: Maybe Text <?> "string to echo (default \"hullo!\")"
|
|
} deriving (Generic, Show)
|
|
instance ParseRecord Args
|
|
|
|
main :: IO ()
|
|
main = do
|
|
Args{..} <- getRecord "Runs the echo client"
|
|
let
|
|
pay = fromMaybe "hullo!" . unHelpful $ payload
|
|
rqt = EchoRequest pay
|
|
expected = EchoResponse pay
|
|
cfg = ClientConfig
|
|
(Host . fromMaybe "localhost" . unHelpful $ bind)
|
|
(Port . fromMaybe 50051 . unHelpful $ port)
|
|
[] Nothing
|
|
withGRPC $ \g -> withClient g cfg $ \c -> do
|
|
Echo{..} <- echoClient c
|
|
echoDoEcho (ClientNormalRequest rqt 5 mempty) >>= \case
|
|
ClientNormalResponse rsp _ _ StatusOk _
|
|
| rsp == expected -> return ()
|
|
| otherwise -> fail $ "Got unexpected response: '" ++ show rsp ++ "', expected: '" ++ show expected ++ "'"
|
|
ClientNormalResponse _ _ _ st _ -> fail $ "Got unexpected status " ++ show st ++ " from call, expecting StatusOk"
|
|
ClientError e -> fail $ "Got client error: " ++ show e
|
|
putStrLn $ "echo-client success: sent " ++ show pay ++ ", got " ++ show pay
|