{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeOperators #-}
module Main (main) where
import Data.Function ((&))
import Data.Version (Version, showVersion)
import Polysemy
import Polysemy.Error
import Servant
import Servant.Client.Streaming (ClientM, client)
import Servant.Polysemy.Client (ServantClient, runClient, runServantClient)
type MyApi = "api" :> "v1" :> "version" :> Get '[JSON] Version
versionClient :: ClientM Version
versionClient = client (Proxy @MyApi)
program :: Members '[ServantClient, Embed IO] r => Sem r ()
program = do
ev <- runClient versionClient & runError
case ev of
Left err ->
embed $ putStrLn $ "Client failed: " <> show err
Right v ->
embed $ putStrLn $ "Received version: " <> showVersion v
main :: IO ()
main = program
& runServantClient "localhost:8080"
& runM