packages feed

servant-nix-0.1: example/Main.hs

{-# LANGUAGE DataKinds, TypeOperators #-}
import Control.Concurrent
import Network.HTTP.Client hiding (Proxy)
import Network.Wai.Handler.Warp
import Nix
import Servant
import Servant.Client
import Servant.Nix

-- returns Nix expressions received as input
type IdAPI = ReqBody '[Nix] NExpr :> Post '[Nix] NExpr

api :: Proxy IdAPI
api = Proxy

server :: Server IdAPI
server = pure

postExpr :: NExpr -> ClientM NExpr
postExpr = client api

main :: IO ()
main = do
  mgr <- newManager defaultManagerSettings
  tid <- forkIO $ run 8080 (serve api server)
  threadDelay 500000
  runClientM (postExpr testExpr) (env mgr) >>= \res -> do
    killThread tid
    case res of
      Left err   -> error $ "Problem: " ++ show err
      Right expr -> putStrLn "Roundtrip successful!" >> print expr

  where testExpr = mkList [ mkInt n | n <- [1..10] ]
        env m = ClientEnv m url Nothing
        url   = BaseUrl Http "localhost" 8080 ""