packages feed

bunz-0.0.4: app/Main.hs

{-# LANGUAGE DeriveDataTypeable #-}

module Main where

import qualified Beautifier             as B
import qualified Data.Text.Lazy         as T
import qualified Data.Text.Lazy.IO      as TextIO
import           Data.Version           (showVersion)
import           Paths_bunz             (version)
import           System.Console.CmdArgs ((&=))
import qualified System.Console.CmdArgs as CA
import           System.Posix.IO        (stdInput)
import           System.Posix.Terminal  (queryTerminal)

data Args = Args { jsonString :: String }
  deriving (Show, CA.Data, CA.Typeable)


args = Args { jsonString = CA.def &= CA.typ "JSON String" &= CA.argPos 0 }
    &= CA.summary ("JSON beautifier tool version " ++ showVersion version)

main :: IO ()
main = queryTerminal stdInput >>= run

printBeautified :: T.Text -> IO ()
printBeautified = TextIO.putStr . B.beautify

runFromStdInput :: IO ()
runFromStdInput = TextIO.getContents >>= printBeautified

runFromArgs :: Args -> IO ()
runFromArgs (Args { jsonString = str }) = printBeautified $ T.pack str

run :: Bool -> IO ()
run False = runFromStdInput
run True = CA.cmdArgs args >>= runFromArgs