module Main where import Data.Aeson (Value) import Data.Aeson.Yaml (encode) import Dhall (auto, input, inputFile) import Dhall.JSON (omitNull) import Fly.Types (GroupedJob, Job) import Fly.Yaml (groupedJobsToValue, jobsToValue) import Fly.Options import qualified Data.ByteString.Lazy.Char8 as LBS import qualified Data.Text.IO as T import qualified Options.Applicative as O main :: IO () main = do opts <- O.execParser optsParserWithHelp yaml <- dhallTextToValue opts LBS.putStrLn $ encode $ omitNull yaml dhallTextToValue :: Opts -> IO Value dhallTextToValue (Opts Jobs (File f)) = do jobs <- inputFile auto f :: IO [Job] pure $ jobsToValue jobs dhallTextToValue (Opts Jobs Stdin) = do jobs <- (input auto =<< T.getContents) :: IO [Job] pure $ jobsToValue jobs dhallTextToValue (Opts GroupedJobs (File f)) = do groupedJobs <- inputFile auto f :: IO [GroupedJob] pure $ groupedJobsToValue groupedJobs dhallTextToValue (Opts GroupedJobs Stdin) = do groupedJobs <- (input auto =<< T.getContents) :: IO [GroupedJob] pure $ groupedJobsToValue groupedJobs