mirror of
https://github.com/unclechu/gRPC-haskell.git
synced 2024-12-27 04:09:45 +01:00
49 lines
2.1 KiB
Haskell
49 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
|