sandwich-contexts-kubernetes-0.1.0.0: lib/Test/Sandwich/Contexts/Kubernetes/Util/Aeson.hs
{-# LANGUAGE CPP #-}
module Test.Sandwich.Contexts.Kubernetes.Util.Aeson where
import qualified Data.Aeson as A
import Data.Char
import qualified Data.List as L
import Data.Text hiding (toLower)
import Relude
#if MIN_VERSION_aeson(2,0,0)
import qualified Data.Aeson.Key as A
import qualified Data.Aeson.KeyMap as HM
#else
import Data.Hashable
import qualified Data.HashMap.Strict as HM
#endif
textKeys :: A.Object -> [Text]
#if MIN_VERSION_aeson(2,0,0)
textKeys = fmap A.toText . HM.keys
#else
textKeys = HM.keys
#endif
#if MIN_VERSION_aeson(2,0,0)
aesonLookup :: Text -> HM.KeyMap v -> Maybe v
aesonLookup = HM.lookup . A.fromText
#else
aesonLookup :: (Eq k, Hashable k) => k -> HM.HashMap k v -> Maybe v
aesonLookup = HM.lookup
#endif
#if MIN_VERSION_aeson(2,0,0)
aesonInsert :: Text -> v -> HM.KeyMap v -> HM.KeyMap v
aesonInsert t = HM.insert (A.fromText t)
#else
aesonInsert :: (Eq k, Hashable k) => k -> v -> HM.HashMap k v -> HM.HashMap k v
aesonInsert = HM.insert
#endif
#if MIN_VERSION_aeson(2,0,0)
aesonDelete :: Text -> HM.KeyMap v -> HM.KeyMap v
aesonDelete t = HM.delete (A.fromText t)
#else
aesonDelete :: (Eq k, Hashable k) => k -> HM.HashMap k v -> HM.HashMap k v
aesonDelete = HM.delete
#endif
#if MIN_VERSION_aeson(2,0,0)
aesonToList :: HM.KeyMap v -> [(A.Key, v)]
aesonToList = HM.toList
#else
aesonToList :: HM.HashMap k v -> [(k, v)]
aesonToList = HM.toList
#endif
dropNAndCamelCase :: Int -> String -> String
dropNAndCamelCase n = lowercaseFirst . L.drop n
lowercaseFirst :: [Char] -> [Char]
lowercaseFirst (x:xs) = (toLower x) : xs
lowercaseFirst [] = []