module Data.Aeson.BetterErrors.Utils where
import Control.Monad.Error.Class (MonadError(..))
import qualified Data.Aeson as A
import Data.Scientific (Scientific)
import Data.Text (Text, pack)
tshow :: Show a => a -> Text
tshow = pack . show
catchJust :: MonadError e m
=> (e -> Maybe b)
-> m a
-> (b -> m a)
-> m a
catchJust p act handler = catchError act handle
where
handle e =
case p e of
Nothing -> throwError e
Just b -> handler b
mapLeft :: (a -> b) -> Either a c -> Either b c
mapLeft f (Left x) = Left (f x)
mapLeft _ (Right y) = Right y
patNull :: A.Value -> Maybe ()
patNull A.Null = Just ()
patNull _ = Nothing
patString :: A.Value -> Maybe Text
patString (A.String t) = Just t
patString _ = Nothing
patNumber :: A.Value -> Maybe Scientific
patNumber (A.Number x) = Just x
patNumber _ = Nothing
patBool :: A.Value -> Maybe Bool
patBool (A.Bool x) = Just x
patBool _ = Nothing
patObject :: A.Value -> Maybe A.Object
patObject (A.Object obj) = Just obj
patObject _ = Nothing
patArray :: A.Value -> Maybe A.Array
patArray (A.Array arr) = Just arr
patArray _ = Nothing