{-|
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
  { descriptionMb :: Maybe Text
  , fieldType :: Out.Type m
  , arguments :: In.Arguments
  }


outFieldToField :: OutField m -> Out.Field m
outFieldToField outField =
  Out.Field
    outField.descriptionMb
    outField.fieldType
    outField.arguments


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


inArgumentToArgument :: InArgument -> In.Argument
inArgumentToArgument inArgument =
  In.Argument
    inArgument.argDescMb
    inArgument.argType
    inArgument.valueMb