-- Copyright 2022 United States Government as represented by the Administrator -- of the National Aeronautics and Space Administration. All Rights Reserved. -- -- Disclaimers -- -- Licensed under the Apache License, Version 2.0 (the "License"); you may -- not use this file except in compliance with the License. You may obtain a -- copy of the License at -- -- https://www.apache.org/licenses/LICENSE-2.0 -- -- Unless required by applicable law or agreed to in writing, software -- distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -- WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -- License for the specific language governing permissions and limitations -- under the License. -- -- | Auxiliary functions for working with JSON values. module Data.Aeson.Extra ( mergeObjects ) where -- External imports import Data.Aeson (Value (Null, Object)) import Data.Aeson.KeyMap (union) -- | Merge two JSON values. -- -- Fails if the values are not objects or null. mergeObjects :: Value -> Value -> Value mergeObjects :: Value -> Value -> Value mergeObjects (Object Object m1) (Object Object m2) = Object -> Value Object (Object -> Object -> Object forall v. KeyMap v -> KeyMap v -> KeyMap v union Object m1 Object m2) mergeObjects Value obj Value Null = Value obj mergeObjects Value Null Value obj = Value obj mergeObjects Value _ Value _ = [Char] -> Value forall a. HasCallStack => [Char] -> a error [Char] "The values passed are not objects"