packages feed

morpheus-graphql-0.18.0: test/Feature/Inference/TaggedArguments.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE TypeFamilies #-}

module Feature.Inference.TaggedArguments
  ( api,
  )
where

import Data.Morpheus (interpreter)
import Data.Morpheus.Types
  ( Arg (..),
    GQLRequest,
    GQLResponse,
    GQLType (..),
    RootResolver (..),
    Undefined (..),
  )
import Data.Text
  ( Text,
    pack,
  )
import GHC.Generics (Generic)

data A = A
  { a1 :: Text,
    a2 :: Int
  }
  deriving (Show, Generic, GQLType)

newtype B = B
  {b1 :: Text}
  deriving (Show, Generic, GQLType)

newtype C = C
  {c1 :: Int}
  deriving (Show, Generic, GQLType)

data Query (m :: * -> *) = Query
  { field1 :: A -> B -> C -> m Text,
    field2 :: A -> Arg "b1" Text -> Arg "c1" Int -> m Text
  }
  deriving (Generic, GQLType)

rootResolver :: RootResolver IO () Query Undefined Undefined
rootResolver =
  RootResolver
    { queryResolver =
        Query
          { field1 = \a b c -> pure $ pack $ show (a, b, c),
            field2 = \a b c -> pure $ pack $ show (a, b, c)
          },
      mutationResolver = Undefined,
      subscriptionResolver = Undefined
    }

api :: GQLRequest -> IO GQLResponse
api = interpreter rootResolver