@@ -5,16 +5,17 @@ import Data.ByteString (getContents)
5import Data.ByteString.Lazy (putStr)
5import Data.ByteString.Lazy (putStr)
6import System.Environment (getArgs)
6import System.Environment (getArgs)
7import System.Exit
7import System.Exit
8+import System.IO (stderr, hPutStrLn)
9import Data.Yaml (decodeFileEither, decodeEither')
10import Data.Yaml (decodeFileEither, decodeEither')
11helpMessage :: IO ()
12helpMessage :: IO ()
12−helpMessage = putStrLn "yaml2json FILE\n use - as FILE to indicate stdin" >> exitFailure
13+helpMessage = putStrLn "Usage: yaml2json FILE\n\nuse '-' as FILE to indicate stdin" >> exitFailure
14showJSON :: Show a => Either a Value -> IO b
15showJSON :: Show a => Either a Value -> IO b
15showJSON ejson =
16showJSON ejson =
16 case ejson of
17 case ejson of
17− Left err -> print err >> exitFailure
18+ Left err -> hPutStrLn stderr (show err) >> exitFailure
18 Right res -> putStr (encode (res :: Value)) >> exitSuccess
19 Right res -> putStr (encode (res :: Value)) >> exitSuccess
20main :: IO ()
21main :: IO ()
@@ -22,7 +23,9 @@ main = do
22 args <- getArgs
23 args <- getArgs
23 case args of
24 case args of
24 -- strict getContents will read in all of stdin at once
25 -- strict getContents will read in all of stdin at once
26+ (["-h"]) -> helpMessage
27+ (["--help"]) -> helpMessage
25 (["-"]) -> getContents >>= showJSON . decodeEither'
28 (["-"]) -> getContents >>= showJSON . decodeEither'
26 ([f]) -> decodeFileEither f >>= showJSON
29 ([f]) -> decodeFileEither f >>= showJSON
27 _ -> helpMessage
30 _ -> helpMessage