{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE NoImplicitPrelude #-}

module Data.Morpheus.Client.Fetch.Types
  ( FetchError (..),
    SchemaSource (..),
    ExecutableSource,
    GQLClientResult,
  )
where

import Data.ByteString.Lazy (ByteString)
import Data.Morpheus.Types.Internal.AST
  ( GQLErrors,
  )
import Relude hiding (ByteString)

data FetchError a
  = FetchErrorParseFailure String
  | FetchErrorProducedErrors GQLErrors (Maybe a)
  | FetchErrorNoResult
  deriving (Int -> FetchError a -> ShowS
forall a. Show a => Int -> FetchError a -> ShowS
forall a. Show a => [FetchError a] -> ShowS
forall a. Show a => FetchError a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [FetchError a] -> ShowS
$cshowList :: forall a. Show a => [FetchError a] -> ShowS
show :: FetchError a -> String
$cshow :: forall a. Show a => FetchError a -> String
showsPrec :: Int -> FetchError a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> FetchError a -> ShowS
Show, FetchError a -> FetchError a -> Bool
forall a. Eq a => FetchError a -> FetchError a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: FetchError a -> FetchError a -> Bool
$c/= :: forall a. Eq a => FetchError a -> FetchError a -> Bool
== :: FetchError a -> FetchError a -> Bool
$c== :: forall a. Eq a => FetchError a -> FetchError a -> Bool
Eq, forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (FetchError a) x -> FetchError a
forall a x. FetchError a -> Rep (FetchError a) x
$cto :: forall a x. Rep (FetchError a) x -> FetchError a
$cfrom :: forall a x. FetchError a -> Rep (FetchError a) x
Generic)

data SchemaSource
  = JSON ByteString
  | GQL ByteString
  deriving (Int -> SchemaSource -> ShowS
[SchemaSource] -> ShowS
SchemaSource -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SchemaSource] -> ShowS
$cshowList :: [SchemaSource] -> ShowS
show :: SchemaSource -> String
$cshow :: SchemaSource -> String
showsPrec :: Int -> SchemaSource -> ShowS
$cshowsPrec :: Int -> SchemaSource -> ShowS
Show, SchemaSource -> SchemaSource -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SchemaSource -> SchemaSource -> Bool
$c/= :: SchemaSource -> SchemaSource -> Bool
== :: SchemaSource -> SchemaSource -> Bool
$c== :: SchemaSource -> SchemaSource -> Bool
Eq)

type ExecutableSource = Text

type GQLClientResult (a :: Type) = (Either (FetchError a) a)