hurl-workbench-cli-0.1.0.0: test/fixture-server/Main.hs
module Main (main) where
import FixtureServer (runFixtureRole, runFixtureServer)
import System.Environment (getArgs, getEnvironment, lookupEnv)
import Text.Read (readMaybe)
main :: IO ()
main = do
arguments <- getArgs
case arguments of
["--role", role, "--port", value, "--state-dir", root] | role `elem` ["api", "stub", "worker"] ->
case readMaybe value of
Just port | port > 0 && port <= 65535 -> runFixtureRole role port root
_ -> ioError (userError "invalid role port")
_ -> runDefault arguments
runDefault :: [String] -> IO ()
runDefault arguments = do
if arguments == ["--assert-clean"]
then do
environment <- getEnvironment
if filter (/= "__CF_USER_TEXT_ENCODING") (map fst environment) == ["PORT"] then pure () else ioError (userError "unexpected clean fixture environment names")
else pure ()
environmentPort <- lookupEnv "PORT"
case parsePort arguments environmentPort of
Left message -> ioError (userError message)
Right port -> runFixtureServer port
parsePort :: [String] -> Maybe String -> Either String Int
parsePort arguments environmentPort = case arguments of
["--assert-clean"] -> maybe (Right 18080) readPort environmentPort
[] -> maybe (Right 18080) readPort environmentPort
["--port", value] -> readPort value
_ -> Left "usage: hurl-workbench-fixture-server [--port PORT]"
where
readPort value = case readMaybe value of
Just port | port > 0 && port <= 65535 -> Right port
_ -> Left ("invalid port: " <> value)