HsYAML-aeson-0.2.0.1: src-test/Main.hs
-- |
-- Copyright: © Herbert Valerio Riedel 2018
-- SPDX-License-Identifier: GPL-2.0-or-later
--
module Main where
import qualified Data.Aeson as J
import qualified Data.ByteString.Char8 as BS
import qualified Data.ByteString.Lazy.Char8 as BS.L
import System.Environment
import System.Exit
import System.IO
import Data.YAML
import Data.YAML.Aeson
main :: IO ()
main = do
args <- getArgs
case args of
("yaml2json":args')
| null args' -> cmdYaml2Json
| otherwise -> do
hPutStrLn stderr "unexpected arguments passed to yaml2json sub-command"
exitFailure
("json2yaml":args')
| null args' -> cmdJson2Yaml
| otherwise -> do
hPutStrLn stderr "unexpected arguments passed to json2yaml sub-command"
exitFailure
_ -> do
hPutStrLn stderr "usage: yaml-test <command> [<args>]"
hPutStrLn stderr ""
hPutStrLn stderr "Commands:"
hPutStrLn stderr ""
hPutStrLn stderr " yaml2json reads YAML stream from STDIN and dumps JSON to STDOUT"
hPutStrLn stderr " json2yaml reads JSON stream from STDIN and dumps YAML to STDOUT"
exitFailure
cmdYaml2Json :: IO ()
cmdYaml2Json = do
inYamlDat <- BS.L.getContents
case decodeValue inYamlDat of
Left (loc, err) -> do
hPutStrLn stderr (prettyPosWithSource loc inYamlDat " error" ++ err)
exitFailure
Right x -> (BS.L.putStr . J.encode) x
cmdJson2Yaml :: IO ()
cmdJson2Yaml = do
inJsonDat <- BS.L.getContents
case J.eitherDecode inJsonDat of
Left e -> do
hPutStrLn stderr e
exitFailure
Right x -> (BS.L.putStr . encodeValue . return) x