hstradeking-0.1.0: client/Client.hs
import qualified Control.Exception as E
import Client.Quote
import Data.String
import Data.Conduit
import Finance.TradeKing hiding (Option)
import System.Console.GetOpt
import System.Environment
import System.Exit
import System.IO
data AppToken = ConsumerKey String |
ConsumerSecret String |
OAuthToken String |
OAuthTokenSecret String
options = [Option "k" ["consumer-key"] (ReqArg ConsumerKey "<consumer-key>") "Consumer Key",
Option "s" ["consumer-secret"] (ReqArg ConsumerSecret "<consumer-secret>") "Consumer Secret",
Option "t" ["oauth-token"] (ReqArg OAuthToken "<oauth-token>") "OAuth Token",
Option "S" ["oauth-secret"] (ReqArg OAuthTokenSecret "<oauth-secret>") "OAuth Token Secret"]
buildApp :: [String] -> IO TradeKingApp
buildApp args = do
let (actions, nonOptions, errors) = getOpt RequireOrder options args
-- Look for the config file in certain locations
let defEmptyTradeKingApp = TradeKingApp {
tradeKing = defaultTk,
consumerKey = error "Missing consumer key",
consumerSecret = error "Missing consumer secret",
oAuthToken = error "Missing oauth token",
oAuthTokenSecret = error "Missing oauth token secret"
}
emptyTradeKingAppR <- readTKConf defaultTKConfs
let emptyTradeKingApp = case emptyTradeKingAppR of
Left err -> defEmptyTradeKingApp
Right tkApp -> tkApp
let modifyApp a (ConsumerKey v) = a { consumerKey = fromString v }
modifyApp a (ConsumerSecret v) = a { consumerSecret = fromString v }
modifyApp a (OAuthToken v) = a { oAuthToken = fromString v }
modifyApp a (OAuthTokenSecret v) = a { oAuthTokenSecret = fromString v }
finalTradeKingApp = foldl modifyApp emptyTradeKingApp actions
E.evaluate (consumerKey finalTradeKingApp)
E.evaluate (consumerSecret finalTradeKingApp)
E.evaluate (oAuthToken finalTradeKingApp)
E.evaluate (oAuthTokenSecret finalTradeKingApp)
return finalTradeKingApp
usage = do
progName <- getProgName
let progName' = progName ++ " <COMMAND>"
hPutStrLn stderr (usageInfo progName' options)
exitWith ExitSuccess
main :: IO ()
main = getArgs >>= \args ->
case args of
[] -> usage
["-h"] -> usage
["--help"] -> usage
('-':_):_ -> usage -- command starts with '-'
"quote":args -> buildApp args >>= doQuote args
"info":args -> buildApp args >>= doInfo args
"stream":args -> buildApp args >>= doStream args
_ -> usage