Pretty print settings parsing errors
All checks were successful
Build / audit (push) Successful in 8s
Build / test (push) Successful in 1h3m30s

This commit is contained in:
Eugen Wissner 2024-09-08 16:44:57 +02:00
parent 4f74c2ec10
commit 1418e0ae46
Signed by: belka
GPG Key ID: A27FDC1E8EE902C0

View File

@ -6,7 +6,7 @@ module Main
( main ( main
) where ) where
import Control.Exception (Exception(..), handle) import Control.Exception (Exception(..), handle, SomeException(..))
import Data.Char (isNumber) import Data.Char (isNumber)
import Control.Monad.Catch (MonadThrow(..)) import Control.Monad.Catch (MonadThrow(..))
import Control.Monad.IO.Class (MonadIO(..)) import Control.Monad.IO.Class (MonadIO(..))
@ -20,6 +20,7 @@ import SlackBuilder.Update
import qualified Toml import qualified Toml
import Data.Text (Text) import Data.Text (Text)
import qualified Data.Text as Text import qualified Data.Text as Text
import qualified Data.Text.IO as Text
import Control.Monad.Trans.Reader (ReaderT(..)) import Control.Monad.Trans.Reader (ReaderT(..))
import SlackBuilder.Package (PackageDescription(..)) import SlackBuilder.Package (PackageDescription(..))
import qualified SlackBuilder.Package as Package import qualified SlackBuilder.Package as Package
@ -258,15 +259,22 @@ check = for_ autoUpdatable go
>> liftIO (putStrLn "") >> liftIO (putStrLn "")
main :: IO () main :: IO ()
main = do main = execParser slackBuilderParser
programCommand <- execParser slackBuilderParser >>= handle handleException . withCommandLine
settings <- Toml.decodeFile settingsCodec "config/config.toml"
handle handleException
$ flip runReaderT settings
$ runSlackBuilderT
$ executeCommand programCommand
where where
handleException :: SlackBuilderException -> IO () withCommandLine programCommand = do
settingsResult <- Toml.decodeFileEither settingsCodec configurationFile
case settingsResult of
Right settings -> flip runReaderT settings
$ runSlackBuilderT
$ executeCommand programCommand
Left settingsErrors
-> setSGR [SetColor Foreground Dull Red]
>> putStrLn (configurationFile <> " parsing failed.")
>> setSGR [Reset]
>> Text.putStr (Toml.prettyTomlDecodeErrors settingsErrors)
configurationFile = "config/config.toml"
handleException :: SomeException -> IO ()
handleException slackBuilderException handleException slackBuilderException
= setSGR [SetColor Foreground Dull Red] = setSGR [SetColor Foreground Dull Red]
>> putStrLn (displayException slackBuilderException) >> putStrLn (displayException slackBuilderException)