module Composite.Aeson.Throw (
CompositeAesonParseException
, parseValue'
) where
import Composite.Aeson
import Control.Monad.Catch
import Data.Aeson
import Data.Aeson.BetterErrors
import Data.Typeable
newtype CompositeAesonParseException a = CompositeAesonParseException a
deriving (Eq, Show, Ord)
instance (Typeable a, Show a) => Exception (CompositeAesonParseException a)
parseValue' :: (Typeable e, Show e, MonadThrow m) => JsonFormat e x -> Value -> m x
parseValue' f v = do
let a = parseValue (fromJsonWithFormat f) v
either (throwM . CompositeAesonParseException) return a