import qualified Data.Aeson as Aeson import qualified Data.ByteString.Lazy as ByteString import qualified Data.Conf as Conf import Data.Monoid import qualified Data.Text.IO as Text import qualified Data.Yaml as Yaml import System.Environment import System.FilePath import qualified Text.Megaparsec as Megaparsec main :: IO () main = do as <- getArgs case as of (fp:output:_) -> do mv <- case takeExtension fp of ".yaml" -> Yaml.decodeFile fp ".json" -> Aeson.decode <$> ByteString.readFile fp case mv of Just v -> do let conf :: Aeson.Result Conf.Conf conf = Aeson.fromJSON v writeFile output $ show $ case conf of Aeson.Success c -> Conf.pPrintConf c Aeson.Error e -> error ("Tranformation failure: " <> e) Nothing -> error ("Parse failure " <> fp) _ -> error "Usage: toconf "