morpheus-graphql-0.15.0: test/Feature/Input/Enum/API.hs
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE TypeFamilies #-}
module Feature.Input.Enum.API
( api,
)
where
import Data.Morpheus (interpreter)
import Data.Morpheus.Kind (ENUM)
import Data.Morpheus.Types (GQLRequest, GQLResponse, GQLType (..), RootResolver (..), Undefined (..))
import GHC.Generics (Generic)
data TwoCon
= LA
| LB
deriving (Show, Generic)
data ThreeCon
= T1
| T2
| T3
deriving (Show, Generic)
data Level
= L0
| L1
| L2
| L3
| L4
| L5
| L6
deriving (Show, Generic)
-- types & args
newtype TestArgs a = TestArgs
{ level :: a
}
deriving (Generic, Show, GQLType)
instance GQLType Level where
type KIND Level = ENUM
instance GQLType TwoCon where
type KIND TwoCon = ENUM
instance GQLType ThreeCon where
type KIND ThreeCon = ENUM
-- query
testRes :: Applicative m => TestArgs a -> m a
testRes TestArgs {level} = pure level
-- resolver
data Query m = Query
{ test :: TestArgs Level -> m Level,
test2 :: TestArgs TwoCon -> m TwoCon,
test3 :: TestArgs ThreeCon -> m ThreeCon
}
deriving (Generic, GQLType)
rootResolver :: RootResolver IO () Query Undefined Undefined
rootResolver =
RootResolver
{ queryResolver = Query {test = testRes, test2 = testRes, test3 = testRes},
mutationResolver = Undefined,
subscriptionResolver = Undefined
}
api :: GQLRequest -> IO GQLResponse
api = interpreter rootResolver