on master help sign in
Merge pull request #334 from yesodweb/pb-run-env

Add runEnv: like run but uses $PORT

commit841b2ec4e42614e12d14c17336af078aa952d06b authorGreg Weber <greg@gregweber.info> dateSun 8 Feb 2015, 11:24 (12 years ago) parent07688c0ac1effe
2 files changed+19
warp/Network/Wai/Handler/Warp.hs+1 warp/Network/Wai/Handler/Warp/Run.hs+18
warp/Network/Wai/Handler/Warp.hs+1
@@ -20,6 +20,7 @@
2020module Network.Wai.Handler.Warp (
2121 -- * Run a Warp server
2222 run
23+ , runEnv
2324 , runSettings
2425 , runSettingsSocket
2526 , runSettingsConnection
warp/Network/Wai/Handler/Warp/Run.hs+18
@@ -35,6 +35,7 @@ import Network.Wai.Handler.Warp.Settings
3535import qualified Network.Wai.Handler.Warp.Timeout as T
3636import Network.Wai.Handler.Warp.Types
3737import Network.Wai.Internal (ResponseReceived (ResponseReceived))
38+import System.Environment (getEnvironment)
3839import System.IO.Error (isFullErrorType, ioeGetErrorType)
3940
4041#if WINDOWS
@@ -71,6 +72,23 @@ allowInterrupt = unblock $ return ()
7172run :: Port -> Application -> IO ()
7273run p = runSettings defaultSettings { settingsPort = p }
7374
75+-- | Run an 'Application' on the port present in the @PORT@ environment variable
76+--
77+-- Uses the 'Port' given when the variable is unset.
78+--
79+-- Since X.Y.Z
80+runEnv :: Port -> Application -> IO ()
81+runEnv p app = do
82+ mp <- fmap (lookup "PORT") getEnvironment
83+
84+ maybe (run p app) runReadPort mp
85+
86+ where
87+ runReadPort :: String -> IO ()
88+ runReadPort sp = case reads sp of
89+ ((p', _):_) -> run p' app
90+ _ -> fail $ "Invalid value in $PORT: " ++ sp
91+
7492-- | Run an 'Application' with the given 'Settings'.
7593runSettings :: Settings -> Application -> IO ()
7694runSettings set app = withSocketsDo $