module Main (main) where

import Cardano.Crypto.Init (cryptoInit)
import Cardano.Tools.DBTruncater.Run
import Cardano.Tools.DBTruncater.Types
import DBAnalyser.Parsers
import qualified DBTruncater.Parsers as DBTruncater
import Main.Utf8 (withStdTerminalHandles)
import Options.Applicative
  ( execParser
  , fullDesc
  , helper
  , info
  , progDesc
  , (<**>)
  )
import Ouroboros.Consensus.Storage.ImmutableDB.Impl ()
import Prelude hiding (truncate)

main :: IO ()
IO ()
main = IO () -> IO ()
forall (m :: * -> *) r. (MonadIO m, MonadMask m) => m r -> m r
withStdTerminalHandles (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
  IO ()
cryptoInit
  (DBTruncaterConfig -> Args (CardanoBlock StandardCrypto) -> IO ())
-> (DBTruncaterConfig, Args (CardanoBlock StandardCrypto)) -> IO ()
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry DBTruncaterConfig -> Args (CardanoBlock StandardCrypto) -> IO ()
forall block.
(RunNode block, HasProtocolInfo block) =>
DBTruncaterConfig -> Args block -> IO ()
truncate ((DBTruncaterConfig, Args (CardanoBlock StandardCrypto)) -> IO ())
-> IO (DBTruncaterConfig, Args (CardanoBlock StandardCrypto))
-> IO ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IO (DBTruncaterConfig, Args (CardanoBlock StandardCrypto))
getCommandLineConfig

getCommandLineConfig :: IO (DBTruncaterConfig, CardanoBlockArgs)
getCommandLineConfig :: IO (DBTruncaterConfig, Args (CardanoBlock StandardCrypto))
getCommandLineConfig = ParserInfo (DBTruncaterConfig, Args (CardanoBlock StandardCrypto))
-> IO (DBTruncaterConfig, Args (CardanoBlock StandardCrypto))
forall a. ParserInfo a -> IO a
execParser ParserInfo (DBTruncaterConfig, Args (CardanoBlock StandardCrypto))
opts
 where
  opts :: ParserInfo (DBTruncaterConfig, Args (CardanoBlock StandardCrypto))
opts =
    Parser (DBTruncaterConfig, Args (CardanoBlock StandardCrypto))
-> InfoMod (DBTruncaterConfig, Args (CardanoBlock StandardCrypto))
-> ParserInfo
     (DBTruncaterConfig, Args (CardanoBlock StandardCrypto))
forall a. Parser a -> InfoMod a -> ParserInfo a
info
      (Parser (DBTruncaterConfig, Args (CardanoBlock StandardCrypto))
DBTruncater.commandLineParser Parser (DBTruncaterConfig, Args (CardanoBlock StandardCrypto))
-> Parser
     ((DBTruncaterConfig, Args (CardanoBlock StandardCrypto))
      -> (DBTruncaterConfig, Args (CardanoBlock StandardCrypto)))
-> Parser (DBTruncaterConfig, Args (CardanoBlock StandardCrypto))
forall (f :: * -> *) a b. Applicative f => f a -> f (a -> b) -> f b
<**> Parser
  ((DBTruncaterConfig, Args (CardanoBlock StandardCrypto))
   -> (DBTruncaterConfig, Args (CardanoBlock StandardCrypto)))
forall a. Parser (a -> a)
helper)
      (InfoMod (DBTruncaterConfig, Args (CardanoBlock StandardCrypto))
forall a. InfoMod a
fullDesc InfoMod (DBTruncaterConfig, Args (CardanoBlock StandardCrypto))
-> InfoMod (DBTruncaterConfig, Args (CardanoBlock StandardCrypto))
-> InfoMod (DBTruncaterConfig, Args (CardanoBlock StandardCrypto))
forall a. Semigroup a => a -> a -> a
<> String
-> InfoMod (DBTruncaterConfig, Args (CardanoBlock StandardCrypto))
forall a. String -> InfoMod a
progDesc String
"Utility for truncating an ImmutableDB")