{-|
Increase readability of code
by wrapping `graphql` library with descriptive wrappers
-}
module AirGQL.GQLWrapper (
  OutField (..),
  outFieldToField,
  InArgument (..),
  inArgumentToArgument,
)
where

import Protolude (Maybe, Text)

import Language.GraphQL.Type (Value)
import Language.GraphQL.Type.In qualified as In
import Language.GraphQL.Type.Out qualified as Out


data OutField m = OutField
  { forall (m :: * -> *). OutField m -> Maybe Text
descriptionMb :: Maybe Text
  , forall (m :: * -> *). OutField m -> Type m
fieldType :: Out.Type m
  , forall (m :: * -> *). OutField m -> Arguments
arguments :: In.Arguments
  }


outFieldToField :: OutField m -> Out.Field m
outFieldToField :: forall (m :: * -> *). OutField m -> Field m
outFieldToField OutField m
outField =
  Maybe Text -> Type m -> Arguments -> Field m
forall (m :: * -> *). Maybe Text -> Type m -> Arguments -> Field m
Out.Field
    OutField m
outField.descriptionMb
    OutField m
outField.fieldType
    OutField m
outField.arguments


data InArgument = InArgument
  { InArgument -> Maybe Text
argDescMb :: Maybe Text
  , InArgument -> Type
argType :: In.Type
  , InArgument -> Maybe Value
valueMb :: Maybe Value
  }


inArgumentToArgument :: InArgument -> In.Argument
inArgumentToArgument :: InArgument -> Argument
inArgumentToArgument InArgument
inArgument =
  Maybe Text -> Type -> Maybe Value -> Argument
In.Argument
    InArgument
inArgument.argDescMb
    InArgument
inArgument.argType
    InArgument
inArgument.valueMb