module Patrol.Extra.Aeson where

import qualified Data.Aeson as Aeson
import qualified Data.Aeson.Key as Key
import qualified Data.Aeson.Types as Aeson
import qualified Data.Text as Text

intoObject :: [Aeson.Pair] -> Aeson.Value
intoObject :: [Pair] -> Value
intoObject = [Pair] -> Value
Aeson.object forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> Bool) -> [a] -> [a]
filter (Bool -> Bool
not forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Bool
isEmpty forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a, b) -> b
snd)

isEmpty :: Aeson.Value -> Bool
isEmpty :: Value -> Bool
isEmpty Value
value = case Value
value of
  Aeson.Array Array
array -> forall (t :: * -> *) a. Foldable t => t a -> Bool
null Array
array
  Value
Aeson.Null -> Bool
True
  Aeson.Object Object
object -> forall (t :: * -> *) a. Foldable t => t a -> Bool
null Object
object
  Aeson.String Text
string -> Text -> Bool
Text.null Text
string
  Value
_ -> Bool
False

pair :: (Aeson.ToJSON a) => String -> a -> Aeson.Pair
pair :: forall a. ToJSON a => String -> a -> Pair
pair = forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
(Aeson..=) forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Key
Key.fromString