tempo-0.1.0.0: app/Simple.hs
module Simple where
import System.Environment
import Control.Monad.Except
import Data.Time
import Data.Time.Format
import Data.Either.Utils
import Config
import Jira
import Git
import CLI
main :: IO ()
main = do
args <- getArgs
config <- forceEither <$> readConfig
let workLog = forceEither $ parseArgs args
submitLogInteractive config [workLog]
usage = "usage: tempo-simple DATE ISSUE HOURS"
parseArgs :: [String] -> Either String WorkLog
parseArgs [d,i,h] = do
day <- parseDay d
hrs <- parseFloat h
return $ WorkLog day i hrs
parseArgs xs
| length xs < 3 = throwError $ "not enough arguments; " ++ usage
| otherwise = throwError $ "too many arguments; " ++ usage
parseDay :: String -> Either String Day
parseDay xs = case parseTimeM False defaultTimeLocale "%Y/%m/%d" xs of
Just d -> return d
Nothing -> throwError $ "cannot parse date " ++ xs ++ " in fomrat yyyy/mm/dd"
parseFloat :: String -> Either String Float
parseFloat xs = case reads xs of
[(n,"")] -> return n
_ -> throwError "cannot parse hours worked"