cmt-0.3.0.0: src/Cmt.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module Cmt
( go
) where
import ClassyPrelude
import System.Directory (removeFile)
import Cmt.IO.Config (load)
import Cmt.IO.Git (commit)
import Cmt.IO.Input (loop)
import Cmt.Output.Format (format)
import Cmt.Types.Config (Config, Output)
data Next
= Previous
| Continue [Output]
backup :: FilePath
backup = ".cmt.bkp"
send :: Text -> IO ()
send txt = do
commited <- commit txt
case commited of
Right msg -> putStrLn msg
Left msg -> do
writeFile backup (encodeUtf8 txt)
putStrLn msg
display :: Either Text (Config, [Output]) -> IO ()
display (Left err) = putStrLn err
display (Right (cfg, output)) = do
parts <- loop cfg
send $ format cfg (output ++ parts)
previous :: IO ()
previous = do
txt <- decodeUtf8 <$> readFile backup
removeFile backup
send txt
parseArgs :: [Text] -> Next
parseArgs ["--prev"] = Previous
parseArgs [] = Continue []
parseArgs [msg] = Continue [("*", msg)]
parseArgs parts = Continue [("*", unwords parts)]
go :: IO ()
go = do
next <- parseArgs <$> getArgs
case next of
Continue output -> load output >>= display
Previous -> previous