packages feed

libjenkins-0.8.3: example/repl.hs

{-# LANGUAGE CPP #-}
{-# LANGUAGE OverloadedStrings #-}
-- | A simple Groovy REPL (type :q to quit)
--
-- @
-- >>> println "Hello, World!"
-- Hello, World!
-- >>> println 4 * 7
-- 28
-- @
module Main (main) where

#if __GLASGOW_HASKELL__ < 710
import           Control.Applicative       -- base
#endif
import           Data.Text.Lazy (Text)     -- text
import qualified Data.Text.Lazy.IO as Text -- text
import           Env                       -- envparse
import           Jenkins.Rest as Jenkins   -- libjenkins
import qualified System.IO as IO           -- base


main :: IO ()
main = do
  conf <- envConf
  Right ()
       <- Jenkins.run conf loop
  return ()

envConf :: IO Jenkins.Master
envConf = Env.parse (desc "A simple Groovy REPL") $
  Jenkins.Master <$> var str "JENKINS_URL"       (help "Jenkins URL")
                 <*> var str "JENKINS_USERNAME"  (help "Jenkins username")
                 <*> var str "JENKINS_API_TOKEN" (help "Jenkins API token")

loop :: Jenkins ()
loop = do
  reply <- prompt
  case reply of
    ":q" -> return ()
    _    -> do
      res <- groovy reply
      liftIO $ do Text.putStr res; flush;
      loop

prompt :: Jenkins Text
prompt = liftIO $ do Text.putStr ">>> "; flush; Text.getLine

flush :: IO ()
flush = IO.hFlush IO.stdout