module Network.Wai.Handler.Warp.Settings where
import Control.Exception
import Control.Monad
import qualified Data.ByteString as S
import Data.Conduit
import Data.Conduit.Network (HostPreference (HostIPv4))
import Network.Wai
import Network.Wai.Handler.Warp.Timeout
import Network.Wai.Handler.Warp.Types
import System.IO (hPrint, stderr)
data Settings = Settings
{ settingsPort :: Int
, settingsHost :: HostPreference
, settingsOnException :: SomeException -> IO ()
, settingsOnOpen :: IO ()
, settingsOnClose :: IO ()
, settingsTimeout :: Int
, settingsIntercept :: Request -> Maybe (Source (ResourceT IO) S.ByteString -> Connection -> ResourceT IO ())
, settingsManager :: Maybe Manager
}
defaultSettings :: Settings
defaultSettings = Settings
{ settingsPort = 3000
, settingsHost = HostIPv4
, settingsOnException = \e ->
case fromException e of
Just x -> go x
Nothing ->
when (go' $ fromException e) $
hPrint stderr e
, settingsOnOpen = return ()
, settingsOnClose = return ()
, settingsTimeout = 30
, settingsIntercept = const Nothing
, settingsManager = Nothing
}
where
go :: InvalidRequest -> IO ()
go _ = return ()
go' (Just ThreadKilled) = False
go' _ = True