bnb-staking-csvs-0.2.0.0: src/Console/BnbStaking/Main.hs
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE RecordWildCards #-}
{- | CLI application harness.
-}
module Console.BnbStaking.Main
( run
, getArgs
, Args(..)
) where
import Data.Maybe ( fromMaybe )
import Data.Version ( showVersion )
import Network.HTTP.Req ( defaultHttpConfig
, runReq
)
import System.Console.CmdArgs ( (&=)
, Data
, Typeable
, argPos
, cmdArgs
, def
, explicit
, help
, helpArg
, name
, program
, summary
, typ
)
import Console.BnbStaking.Api ( getAllRewards )
import Console.BnbStaking.CoinTracking
( makeCoinTrackingImport )
import Console.BnbStaking.Csv ( makeCsvContents )
import Paths_bnb_staking_csvs ( version )
import qualified Data.ByteString.Lazy.Char8 as LBC
import qualified Data.Text as T
-- | Run the executable - parsing args, making queries, & printing the
-- results.
run :: Args -> IO ()
run Args {..} = do
rewards <- runReq defaultHttpConfig $ getAllRewards $ T.pack argPubKey
let outputFile = fromMaybe "-" argOutputFile
if argCoinTracking
then makeCoinTrackingImport outputFile argPubKey rewards
else do
output <- makeCsvContents rewards
if outputFile == "-"
then LBC.putStr output
else LBC.writeFile outputFile output
-- | CLI arguments supported by the executable.
data Args = Args
{ argPubKey :: String
-- ^ BinanceChain account's pubkey.
, argOutputFile :: Maybe String
-- ^ Optional output file. 'Nothing' or @'Just' "-"@ will print to
-- 'System.IO.stdout'.
, argCoinTracking :: Bool
-- ^ Flag to enable writing/printing files formatted for CoinTracking
-- Bulk Imports.
}
deriving (Show, Read, Eq, Data, Typeable)
-- | Parse the CLI arguments with 'System.Console.CmdArgs'.
getArgs :: IO Args
getArgs = cmdArgs argSpec
argSpec :: Args
argSpec =
Args
{ argPubKey = def &= argPos 0 &= typ "ACCOUNT_PUBKEY"
, argOutputFile =
Nothing
&= help "File to write the export to. Default: stdout"
&= explicit
&= name "output-file"
&= name "o"
&= typ "FILE"
, argCoinTracking = False
&= help "Generate a CoinTracking Import file."
&= explicit
&= name "cointracking"
}
&= summary
( "bnb-staking-csvs v"
<> showVersion version
<> ", Pavan Rikhi 2021"
)
&= program "bnb-staking-csvs"
&= helpArg [name "h"]
&= help "Generate CSV Exports of you BinanceChain Staking Rewards."