module Test.Hspec.Expectations.Json.Lifted
  ( shouldMatchJson
  , shouldBeJson
  , shouldBeJsonNormalized
  , E.Normalizer
  , E.defaultNormalizer
  , E.treatNullsAsMissing
  , E.ignoreArrayOrdering
  , E.subsetActualToExpected
  , E.expandHeterogenousArrays

    -- * Legacy API

    -- | Prefer to use shouldBeJsonNormalized with the appropriate 'Normalizer'
  , shouldBeUnorderedJson
  , shouldMatchOrderedJson
  ) where

import Prelude

import Control.Monad.IO.Class (MonadIO (..))
import Data.Aeson
import GHC.Stack
import qualified Test.Hspec.Expectations.Json as E

shouldBeJsonNormalized
  :: (HasCallStack, MonadIO m) => E.Normalizer -> Value -> Value -> m ()
shouldBeJsonNormalized :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
Normalizer -> Value -> Value -> m ()
shouldBeJsonNormalized Normalizer
n Value
x = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. HasCallStack => Normalizer -> Value -> Value -> IO ()
E.shouldBeJsonNormalized Normalizer
n Value
x

shouldBeJson :: (HasCallStack, MonadIO m) => Value -> Value -> m ()
shouldBeJson :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
Value -> Value -> m ()
shouldBeJson Value
x = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. HasCallStack => Value -> Value -> IO ()
E.shouldBeJson Value
x

shouldBeUnorderedJson :: (HasCallStack, MonadIO m) => Value -> Value -> m ()
shouldBeUnorderedJson :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
Value -> Value -> m ()
shouldBeUnorderedJson Value
x = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. HasCallStack => Value -> Value -> IO ()
E.shouldBeUnorderedJson Value
x

shouldMatchJson :: (HasCallStack, MonadIO m) => Value -> Value -> m ()
shouldMatchJson :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
Value -> Value -> m ()
shouldMatchJson Value
x = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. HasCallStack => Value -> Value -> IO ()
E.shouldMatchJson Value
x

shouldMatchOrderedJson :: (HasCallStack, MonadIO m) => Value -> Value -> m ()
shouldMatchOrderedJson :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
Value -> Value -> m ()
shouldMatchOrderedJson Value
x = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. HasCallStack => Value -> Value -> IO ()
E.shouldMatchOrderedJson Value
x