packages feed

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"