Created
October 12, 2014 07:56
-
-
Save benkolera/3f2aaad7e2ed86026a94 to your computer and use it in GitHub Desktop.
Lensy GetOpts, but could be nicer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| {-# LANGUAGE OverloadedStrings,TemplateHaskell #-} | |
| module Main (main) where | |
| import Prelude () | |
| import BasePrelude | |
| import Control.Lens | |
| import Control.Monad.State (State,execState) | |
| import Network.Wai.Handler.Warp | |
| import Rest.Driver.Wai (apiToApplication) | |
| import System.Console.GetOpt | |
| import System.Environment (getArgs) | |
| import Api (api) | |
| import NetDataSink (confToEnv,runApi) | |
| import Config | |
| data Options = Options | |
| { _optPort :: Int | |
| , _optMode :: String | |
| } deriving Show | |
| makeLenses ''Options | |
| defaultOptions :: Options | |
| defaultOptions = Options 13012 "devel" | |
| options :: [OptDescr (State Options ())] | |
| options = | |
| [ Option ['p'] ["port"] (ReqArg (assign optPort . read) "port") "The port to listen on. Defaults to 13012" | |
| , Option ['m'] ["mode"] (ReqArg (assign optMode) "{devel,prod}") "Application mode: Defaults to devel" | |
| ] | |
| parseOptions :: [String] -> IO (Options, [String]) | |
| parseOptions argv = | |
| case getOpt Permute options argv of | |
| (o,n,[] ) -> return (flip execState defaultOptions . sequence $ o, n) | |
| (_,_,errs) -> ioError (userError (concat errs ++ usageInfo header options)) | |
| where | |
| header = "Usage: iseek-CRM-Network-DataSink [OPTION ...]" | |
| main :: IO () | |
| main = do | |
| (opts,_) <- getArgs >>= parseOptions | |
| putStrLn $ "Starting api on port:" <> opts ^. optPort . to show | |
| env <- loadApiConfig (opts ^. optMode) >>= confToEnv | |
| run (opts ^. optPort) $ apiToApplication (runApi env) api |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment