{-# LANGUAGE OverloadedStrings #-} module Aws.SSSP.App where import Control.Applicative import qualified Data.ByteString.Char8 as Bytes import Data.Monoid import System.Environment import System.Exit import System.IO import qualified Network.Wai.Handler.Warp as WWW import qualified Network.Wai.Middleware.RequestLogger as WWW import Aws.SSSP.Configuration import Aws.SSSP app = args =<< getArgs args [ ] = web args ["web"] = web args args = argumentError args web = do res <- conf case res of Left map -> err (misconfigured map) Right (ctx, www) -> WWW.runSettings www (WWW.logStdout (wai ctx)) where misconfigured map = mappend "!!! Misconfigured for web; please check:\n" (render map) argumentError args = (err . Bytes.unlines) ("Not able to interpret these command line arguments:" : (fmt <$> args)) where fmt = (mappend " ") . Bytes.pack msg s = Bytes.hPutStrLn stderr s err s = msg s >> exitFailure