hix-0.1.0.0: lib/Hix/Json.hs
module Hix.Json where
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Except (throwE)
import qualified Data.Aeson as Aeson
import Data.Aeson (FromJSON, fromJSON)
import Exon (exon)
import Hix.Data.Error (Error (GhciError))
import Hix.Monad (M)
import Hix.Optparse (JsonConfig (JsonConfig))
jsonConfig ::
FromJSON a =>
JsonConfig ->
M a
jsonConfig (JsonConfig mv) =
liftIO mv >>= \case
Left msg -> failure [exon|Invalid JSON: #{toText msg}|]
Right v -> case fromJSON v of
Aeson.Success a -> pure a
Aeson.Error err -> failure [exon|Invalid JSON: #{toText err}
#{show v}|]
where
failure = lift . throwE . GhciError