module Data.Aeson.Extra
  ( lookupObject
  , lookupArray
  , lookupString
  , lookupBool
  ) where


import           Data.Aeson
import qualified Data.HashMap.Strict as HM
import qualified Data.Text           as T

lookupObject key kvs =
  case (HM.lookup key kvs) of
    Just (Object obj) ->
      HM.fromList $ map (\(k, v) -> (T.unpack k, v)) $ HM.toList obj
    _                 -> HM.empty

lookupArray key kvs =
  case (HM.lookup key kvs) of
    Just (Array arr) -> foldr (:) [] arr
    _                -> []

lookupString def key kvs =
  case (HM.lookup key kvs) of
    Just (String t) -> T.unpack t
    _               -> def

lookupBool def key kvs =
  case (HM.lookup key kvs) of
    Just (Bool b) -> b
    _             -> def