{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DeriveTraversable #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
module Data.GraphQL.Result
( GraphQLResult(..)
, getErrors
, getResult
) where
import Data.Aeson (FromJSON(..), withObject, (.!=), (.:?))
import Data.GraphQL.Error (GraphQLError)
data GraphQLResult r = GraphQLResult
{ resultErrors :: [GraphQLError]
, resultResult :: Maybe r
} deriving (Show,Functor,Foldable,Traversable)
instance FromJSON r => FromJSON (GraphQLResult r) where
parseJSON = withObject "GraphQLResult" $ \o ->
GraphQLResult
<$> o .:? "errors" .!= []
<*> o .:? "data"
getErrors :: GraphQLResult r -> [GraphQLError]
getErrors = resultErrors
getResult :: GraphQLResult r -> Maybe r
getResult = resultResult