hix-0.7.0: lib/Hix/Json.hs
module Hix.Json where
import qualified Data.Aeson as Aeson
import Data.Aeson (FromJSON, fromJSON)
import Exon (exon)
import Hix.Data.Error (Error)
import Hix.Data.Monad (M)
import Hix.Monad (throwM)
import Hix.Optparse (JsonConfig (JsonConfig))
jsonConfig ::
FromJSON a =>
(Text -> Error) ->
JsonConfig ->
M a
jsonConfig consError (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 = throwM . consError
jsonConfigE ::
FromJSON a =>
(Text -> Error) ->
Either a JsonConfig ->
M a
jsonConfigE consError =
either pure (jsonConfig consError)