{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} module Feature.Input.Enum.API ( api ) where import Data.Morpheus (interpreter) import Data.Morpheus.Kind (ENUM) import Data.Morpheus.Types (GQLRequest, GQLResponse, GQLRootResolver (..), GQLType (..), IORes) 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) 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 :: TestArgs a -> IORes a testRes TestArgs {level} = return level -- resolver data Query = Query { test :: TestArgs Level -> IORes Level , test2 :: TestArgs TwoCon -> IORes TwoCon , test3 :: TestArgs ThreeCon -> IORes ThreeCon } deriving (Generic, GQLType) rootResolver :: GQLRootResolver IO () () Query () () rootResolver = GQLRootResolver { queryResolver = return Query {test = testRes, test2 = testRes, test3 = testRes} , mutationResolver = return () , subscriptionResolver = return () } api :: GQLRequest -> IO GQLResponse api = interpreter rootResolver