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
fcontents <- Text.readFile fp
let conf = case Megaparsec.parse Conf.conf fp fcontents of
Right c -> c
Left e -> error ("Failed to parse " <> fp <> "\n" <> show e)
confv = Aeson.toJSON conf
case takeExtension output of
".json" -> ByteString.writeFile output (Aeson.encode confv)
".yaml" -> Yaml.encodeFile output confv
_ -> error "Unsupported output format"
_ -> error "Usage: fromconf <inputfile> <outputfile>"