packages feed

grapesy-etcd-0.1.0: app/Client.hs

module Client (main) where

import Network.GRPC.Client
import Network.GRPC.Client.StreamType.IO
import Network.GRPC.Common
import Network.GRPC.Common.NextElem qualified as NextElem
import Network.GRPC.Common.Protobuf

import Proto.API.Etcd

{-------------------------------------------------------------------------------
  Call some methods of the Etcd service
-------------------------------------------------------------------------------}

range :: Connection -> IO ()
range conn = do
    let req = defMessage
                & #key  .~  "foo"
    resp <- nonStreaming conn (rpc @(Protobuf KV "range")) req
    print resp

put :: Connection -> IO ()
put conn = do
    let req = defMessage
                & #key  .~  "foo"
    resp <- nonStreaming conn (rpc @(Protobuf KV "put")) req
    print resp

watch :: Connection -> IO ()
watch conn = do
    let req = defMessage
                & #createRequest .~ (defMessage & #key .~ "foo")
    biDiStreaming conn (rpc @(Protobuf Watch "watch")) $ \send recv -> do
      NextElem.forM_ (replicate 5 req) send
      NextElem.whileNext_ recv print

main :: IO ()
main =
    withConnection def server $ \conn -> do
      putStrLn "-------------- Range --------------"
      range conn
      put conn
      watch conn

  where
    server :: Server
    server = ServerInsecure $ Address "127.0.0.1" 2379 Nothing
--}