module Data.JLD.Model.GraphObject (isGraphObject, isGraphObject', isNotGraphObject, isNotGraphObject', toGraphObject) where import Data.JLD.Prelude import Data.JLD.Model.Keyword (Keyword (..), isKeyword) import Data.Aeson (Object, Value (..)) import Data.Aeson.Key qualified as K (toText) import Data.Aeson.KeyMap qualified as KM (keys, member, singleton) isGraphObject :: Value -> Bool isGraphObject (Object o) = isGraphObject' o isGraphObject _ = False isGraphObject' :: Object -> Bool isGraphObject' o = KM.member (show KeywordGraph) o && all (`isKeyword` [KeywordGraph, KeywordId, KeywordIndex, KeywordContext]) (K.toText <$> KM.keys o) isNotGraphObject :: Value -> Bool isNotGraphObject = isGraphObject .> not isNotGraphObject' :: Object -> Bool isNotGraphObject' = isGraphObject' .> not toGraphObject :: Value -> Object toGraphObject = pure .> Array .> KM.singleton (show KeywordGraph)