module DrCabal.Json
( readEntries
, writeEntries
) where
import Data.Aeson (eitherDecodeFileStrict')
import Data.Aeson.Encode.Pretty (encodePretty)
import DrCabal.Model (Entry)
import qualified Colourista
readEntries :: FilePath -> IO [Entry]
readEntries :: FilePath -> IO [Entry]
readEntries FilePath
file = forall a. FromJSON a => FilePath -> IO (Either FilePath a)
eitherDecodeFileStrict' FilePath
file forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
Right [Entry]
entries -> forall (f :: * -> *) a. Applicative f => a -> f a
pure [Entry]
entries
Left FilePath
err -> do
Text -> IO ()
Colourista.errorMessage forall a b. (a -> b) -> a -> b
$ Text
"Error parsing file: " forall a. Semigroup a => a -> a -> a
<> forall a. ToText a => a -> Text
toText FilePath
file
Text -> IO ()
Colourista.redMessage forall a b. (a -> b) -> a -> b
$ Text
" " forall a. Semigroup a => a -> a -> a
<> forall a. ToText a => a -> Text
toText FilePath
err
forall (m :: * -> *) a. MonadIO m => m a
exitFailure
writeEntries :: FilePath -> [Entry] -> IO ()
writeEntries :: FilePath -> [Entry] -> IO ()
writeEntries FilePath
outputPath = forall (m :: * -> *). MonadIO m => FilePath -> LByteString -> m ()
writeFileLBS FilePath
outputPath forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. ToJSON a => a -> LByteString
encodePretty