{-# LANGUAGE OverloadedStrings #-} module IpeDb.Main (defaultMain) where import Data.Text (Text) import qualified Data.Text as Text import qualified Data.Text.IO as Text import IpeDb.InfoProv import qualified IpeDb.Options as Opts import IpeDb.Query defaultMain :: IO () defaultMain :: IO () defaultMain = do opts <- IO Options Opts.parseOptions case opts.command of Opts.Query QueryOptions query -> FilePath -> (InfoProvDb -> IO ()) -> IO () forall a. FilePath -> (InfoProvDb -> IO a) -> IO a withInfoProvDb Options opts.databaseFp ((InfoProvDb -> IO ()) -> IO ()) -> (InfoProvDb -> IO ()) -> IO () forall a b. (a -> b) -> a -> b $ \InfoProvDb db -> do InfoProvDb -> IpeId -> IO (Maybe InfoProv) lookupInfoProv InfoProvDb db QueryOptions query.ipeId IO (Maybe InfoProv) -> (Maybe InfoProv -> IO ()) -> IO () forall a b. IO a -> (a -> IO b) -> IO b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= \case Maybe InfoProv Nothing -> Text -> IO () Text.putStrLn (Text -> IO ()) -> Text -> IO () forall a b. (a -> b) -> a -> b $ Text "No Info Prov found for " Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> IpeId -> Text forall a. Show a => a -> Text Text.show QueryOptions query.ipeId Just InfoProv prov -> Text -> IO () Text.putStrLn (Text -> IO ()) -> Text -> IO () forall a b. (a -> b) -> a -> b $ InfoProv -> Text prettyInfoProv InfoProv prov Opts.Index IndexOptions index -> FilePath -> (InfoProvDb -> IO ()) -> IO () forall a. FilePath -> (InfoProvDb -> IO a) -> IO a withInfoProvDb Options opts.databaseFp ((InfoProvDb -> IO ()) -> IO ()) -> (InfoProvDb -> IO ()) -> IO () forall a b. (a -> b) -> a -> b $ \InfoProvDb db -> do InfoProvDb -> FilePath -> IO () populateFromEventlog InfoProvDb db IndexOptions index.eventlog prettyInfoProv :: InfoProv -> Text prettyInfoProv :: InfoProv -> Text prettyInfoProv InfoProv prov = [Text] -> Text Text.unlines [ Text "Info Table " Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> IpeId -> Text prettyIpeId InfoProv prov.infoId , Text " Table Name: " Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> InfoProv prov.tableName , Text " Closure Desc: " Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> Int64 -> Text forall a. Show a => a -> Text Text.show InfoProv prov.closureDesc , Text " Type Desc: " Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> InfoProv prov.typeDesc , Text " Label: " Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> InfoProv prov.label , Text " Modulename: " Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> InfoProv prov.moduleName , Text " Source Location: " Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> InfoProv prov.srcLoc ]