morpheus-graphql-client-0.20.0: src/Data/Morpheus/Client/Declare/Client.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE NoImplicitPrelude #-}
module Data.Morpheus.Client.Declare.Client
( declareTypes,
)
where
import Data.Morpheus.Client.Declare.Aeson
( aesonDeclarations,
)
import Data.Morpheus.Client.Declare.Type
( typeDeclarations,
)
import Data.Morpheus.Client.Internal.Types
( ClientTypeDefinition (..),
)
import Language.Haskell.TH
import Relude hiding (Type)
declareTypes :: [ClientTypeDefinition] -> Q [Dec]
declareTypes subTypes = concat <$> traverse declareType subTypes
declareType :: ClientTypeDefinition -> Q [Dec]
declareType clientType@ClientTypeDefinition {clientKind} = do
types <- typeDeclarations clientKind clientType
instances <- aesonDeclarations clientKind clientType
pure (types <> instances)