{-# LANGUAGE CPP #-}

module Data.Aeson.Schema.Utils.Compat (
  -- * Key
  Key,
  keyToText,

  -- * KeyMap
  KeyMap,
  KeyMap.singleton,
  KeyMap.fromList,
  KeyMap.lookup,
  unions,
) where

import Data.List (foldl')
import Data.Text (Text)
import Prelude hiding (lookup)

#if MIN_VERSION_aeson(2,0,0)
import Data.Aeson.Key (Key)
import qualified Data.Aeson.Key as Key
import Data.Aeson.KeyMap (KeyMap)
import qualified Data.Aeson.KeyMap as KeyMap

keyToText :: Key -> Text
keyToText :: Key -> Text
keyToText = Key -> Text
Key.toText
#else
import Data.HashMap.Strict (HashMap)
import qualified Data.HashMap.Strict as KeyMap

type Key = Text
type KeyMap = HashMap Key

keyToText :: Key -> Text
keyToText = id
#endif

unions :: [KeyMap v] -> KeyMap v
unions :: forall v. [KeyMap v] -> KeyMap v
unions = (KeyMap v -> KeyMap v -> KeyMap v)
-> KeyMap v -> [KeyMap v] -> KeyMap v
forall b a. (b -> a -> b) -> b -> [a] -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' KeyMap v -> KeyMap v -> KeyMap v
forall v. KeyMap v -> KeyMap v -> KeyMap v
KeyMap.union KeyMap v
forall v. KeyMap v
KeyMap.empty