morpheus-graphql-server-0.27.0: src/Data/Morpheus/Server/Deriving/Utils/Use.hs
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE RankNTypes #-}
module Data.Morpheus.Server.Deriving.Utils.Use
( UseDirective (..),
UseDeriveType (..),
UseArguments (..),
UseGQLType (..),
useTypename,
)
where
import Data.Morpheus.Server.Deriving.Schema.Internal
import Data.Morpheus.Server.Types.Directives
( GDirectiveUsages (..),
)
import Data.Morpheus.Server.Types.Internal
import Data.Morpheus.Server.Types.SchemaT
( SchemaT,
)
import Data.Morpheus.Server.Types.TypeName
( TypeFingerprint,
)
import Data.Morpheus.Types.Internal.AST
( Arguments,
ArgumentsDefinition,
CONST,
OUT,
TypeCategory (..),
TypeName,
)
useTypename :: (gqlType a) => UseGQLType gqlType -> CatType c a -> TypeName
useTypename gql proxy@InputType = __useTypename gql IN proxy
useTypename gql proxy@OutputType = __useTypename gql OUT proxy
data UseGQLType gql = UseGQLType
{ __useFingerprint :: forall f a. gql a => TypeCategory -> f a -> TypeFingerprint,
__useTypename :: forall f a. gql a => TypeCategory -> f a -> TypeName,
__useTypeData :: forall f a. gql a => f a -> TypeCategory -> TypeData
}
data UseArguments args = UseArguments
{ useDeriveArguments :: forall f a. args a => f a -> SchemaT OUT (ArgumentsDefinition CONST),
useEncodeArguments :: forall k a. args a => a -> SchemaT k (Arguments CONST)
}
data UseDirective gql args = UseDirective
{ __directives :: forall f a. gql a => f a -> GDirectiveUsages gql args,
dirArgs :: UseArguments args,
dirGQL :: UseGQLType gql
}
data UseDeriveType derive = UseDeriveType
{ useDeriveType :: forall c a. derive c a => CatType c a -> SchemaT c (),
useDeriveContent :: forall c a. derive c a => CatType c a -> TyContentM c
}