{-# LANGUAGE CPP #-}
module Platform.AesonHelpers (foldObject, mergeObjects) where
#if MIN_VERSION_aeson(2,0,0)
import qualified Data.Aeson as Aeson
import qualified Data.Aeson.Key as Key
import qualified Data.Aeson.KeyMap as KeyMap
foldObject :: (Text -> Aeson.Value -> acc -> acc) -> acc -> Aeson.Object -> acc
foldObject fn = KeyMap.foldrWithKey (\key val acc -> fn (Key.toText key) val acc)
mergeObjects ::
(Aeson.Value -> Aeson.Value -> Aeson.Value) ->
Aeson.Object ->
Aeson.Object ->
Aeson.Object
mergeObjects = KeyMap.unionWith
#else
import qualified Data.Aeson as Aeson
import qualified Data.HashMap.Strict as HashMap
foldObject :: (Text -> Aeson.Value -> acc -> acc) -> acc -> Aeson.Object -> acc
foldObject :: (Text -> Value -> acc -> acc) -> acc -> Object -> acc
foldObject = (Text -> Value -> acc -> acc) -> acc -> Object -> acc
forall k v a. (k -> v -> a -> a) -> a -> HashMap k v -> a
HashMap.foldrWithKey
mergeObjects ::
(Aeson.Value -> Aeson.Value -> Aeson.Value) ->
Aeson.Object ->
Aeson.Object ->
Aeson.Object
mergeObjects :: (Value -> Value -> Value) -> Object -> Object -> Object
mergeObjects Value -> Value -> Value
merge Object
object1 Object
object2 = (Value -> Value -> Value) -> Object -> Object -> Object
forall k v.
(Eq k, Hashable k) =>
(v -> v -> v) -> HashMap k v -> HashMap k v -> HashMap k v
HashMap.unionWith Value -> Value -> Value
merge Object
object1 Object
object2
#endif