packages feed

hedgehog-extras-0.4.8.0: src/Hedgehog/Extras/Stock/Aeson.hs

module Hedgehog.Extras.Stock.Aeson
  ( rewriteObject
  , rewriteArrayElements
  ) where

import           Data.Aeson
import           Data.Aeson.KeyMap (KeyMap)
import           Data.Functor

-- | Rewrite a JSON object to another JSON object using the function 'f'.
--
-- All other JSON values are preserved.
rewriteObject :: (KeyMap Value -> KeyMap Value) -> Value -> Value
rewriteObject f (Object hm) = Object (f hm)
rewriteObject _ v = v

-- | Rewrite each element of a JSON array using the function 'f'.
--
-- All other JSON values are preserved.
rewriteArrayElements :: (Value -> Value) -> Value -> Value
rewriteArrayElements f (Array hm) = Array (fmap f hm)
rewriteArrayElements _ v = v