packages feed

librarian-0.1.0.0: app/Main.hs

module Main where

import qualified Dhall as Dhall
import Librarian
import Options.Applicative as Options

main :: IO ()
main = do
  args <- parseArgs
  rules <- Dhall.inputFile (Dhall.auto @[Rule]) $ rulesFile args
  plan <- planMoves <$> fetchRulesOn "." rules
  displayPlan plan
  putStrLn "Move? (y/n)"
  response <- getChar
  case response of
    'y' -> do
      putStrLn "Proceeding"
      runPlan plan >>= displayResult
      putStrLn "Done."
    _ -> putStrLn "Aborting"

parseArgs :: IO Args
parseArgs =
  execParser $
    info (argsParser <**> helper) (fullDesc <> header "Librarian: moving files, your rules!")
  where
    argsParser :: Parser Args
    argsParser =
      Args
        <$> strOption (long "rules" <> short 'r' <> metavar "FILE_PATH" <> help "Rules file (.dhall)")

newtype Args = Args {rulesFile :: FilePath}
  deriving stock (Eq, Ord, Show)