{-# language DataKinds #-}
{-# language GADTs #-}
{-# language PolyKinds #-}
{-# language ScopedTypeVariables #-}
{-# language TypeOperators #-}
module Mu.GraphQL.Query.Definition where
import Data.SOP.NP
import Data.SOP.NS
import Data.Text
import Data.Typeable
import qualified Language.GraphQL.AST as GQL
import Mu.Rpc
import Mu.Schema
data Document (p :: Package snm mnm anm (TypeRef snm))
(qr :: Maybe snm) (mut :: Maybe snm) (sub :: Maybe snm) where
QueryDoc
:: LookupService ss qr ~ 'Service qr qms
=> ServiceQuery ('Package pname ss) (LookupService ss qr)
-> Document ('Package pname ss) ('Just qr) mut sub
MutationDoc
:: LookupService ss mut ~ 'Service mut mms
=> ServiceQuery ('Package pname ss) (LookupService ss mut)
-> Document ('Package pname ss) qr ('Just mut) sub
SubscriptionDoc
:: LookupService ss sub ~ 'Service sub mms
=> OneMethodQuery ('Package pname ss) (LookupService ss sub)
-> Document ('Package pname ss) qr mut ('Just sub)
data ServiceQuery (p :: Package snm mnm anm (TypeRef snm))
(s :: Service snm mnm anm (TypeRef snm)) where
ServiceQuery :: [OneMethodQuery p ('Service nm ms)]
-> ServiceQuery p ('Service nm ms)
OneOfQuery :: NP (ChosenOneOfQuery p) elts
-> ServiceQuery p ('OneOf nm elts)
data OneMethodQuery (p :: Package snm mnm anm (TypeRef snm))
(s :: Service snm mnm anm (TypeRef snm)) where
OneMethodQuery
:: Maybe Text
-> NS (ChosenMethodQuery p) ms
-> OneMethodQuery p ('Service nm ms)
TypeNameQuery
:: Maybe Text
-> OneMethodQuery p s
SchemaQuery
:: Maybe Text
-> [GQL.Selection]
-> OneMethodQuery p s
TypeQuery
:: Maybe Text
-> Text
-> [GQL.Selection]
-> OneMethodQuery p s
data ChosenOneOfQuery p elt where
ChosenOneOfQuery
:: Typeable elt => Proxy elt
-> ServiceQuery ('Package pname ss) (LookupService ss elt)
-> ChosenOneOfQuery ('Package pname ss) elt
data ChosenMethodQuery (p :: Package snm mnm anm (TypeRef snm))
(m :: Method snm mnm anm (TypeRef snm)) where
ChosenMethodQuery
:: GQL.Field
-> NP (ArgumentValue p) args
-> ReturnQuery p r
-> ChosenMethodQuery p ('Method mname args r)
data ArgumentValue (p :: Package snm mnm anm (TypeRef snm))
(a :: Argument snm anm (TypeRef snm)) where
ArgumentValue :: ArgumentValue' p r
-> ArgumentValue p ('ArgSingle aname r)
ArgumentStream :: ArgumentValue' p ('ListRef r)
-> ArgumentValue p ('ArgStream aname r)
data ArgumentValue' (p :: Package snm mnm anm (TypeRef snm))
(r :: TypeRef snm) where
ArgPrimitive :: t -> ArgumentValue' p ('PrimitiveRef t)
ArgSchema :: Term sch (sch :/: sty)
-> ArgumentValue' p ('SchemaRef sch sty)
ArgList :: [ArgumentValue' p r]
-> ArgumentValue' p ('ListRef r)
ArgOptional :: Maybe (ArgumentValue' p r)
-> ArgumentValue' p ('OptionalRef r)
data ReturnQuery (p :: Package snm mnm anm (TypeRef snm))
(r :: Return snm (TypeRef snm)) where
RNothing :: ReturnQuery p 'RetNothing
RSingle :: ReturnQuery' p r -> ReturnQuery p ('RetSingle r)
RStream :: ReturnQuery' p r -> ReturnQuery p ('RetStream r)
data ReturnQuery' (p :: Package snm mnm anm (TypeRef snm))
(r :: TypeRef snm) where
RetPrimitive :: ReturnQuery' p ('PrimitiveRef t)
RetSchema :: SchemaQuery sch (sch :/: sty)
-> ReturnQuery' p ('SchemaRef sch sty)
RetList :: ReturnQuery' p r -> ReturnQuery' p ('ListRef r)
RetOptional :: ReturnQuery' p r -> ReturnQuery' p ('OptionalRef r)
RetObject :: ServiceQuery ('Package pname ss) (LookupService ss s)
-> ReturnQuery' ('Package pname ss) ('ObjectRef s)
data SchemaQuery (sch :: Schema tn fn) (t :: TypeDef tn fn) where
QueryEnum :: SchemaQuery sch ('DEnum nm choices)
QueryRecord :: [OneFieldQuery sch fs]
-> SchemaQuery sch ('DRecord ty fs)
data OneFieldQuery (sch :: Schema tn fn) (fs :: [FieldDef tn fn]) where
OneFieldQuery
:: Maybe Text
-> NS (ChosenFieldQuery sch) fs
-> OneFieldQuery sch fs
TypeNameFieldQuery
:: Maybe Text
-> OneFieldQuery sch fs
data ChosenFieldQuery (sch :: Schema tn fn) (f :: FieldDef tn fn) where
ChosenFieldQuery
:: ReturnSchemaQuery sch r
-> ChosenFieldQuery sch ('FieldDef name r)
data ReturnSchemaQuery (sch :: Schema tn fn) (r :: FieldType tn) where
RetSchPrimitive :: ReturnSchemaQuery sch ('TPrimitive t)
RetSchSchema :: SchemaQuery sch (sch :/: sty)
-> ReturnSchemaQuery sch ('TSchematic sty)
RetSchList :: ReturnSchemaQuery sch r
-> ReturnSchemaQuery sch ('TList r)
RetSchOptional :: ReturnSchemaQuery sch r
-> ReturnSchemaQuery sch ('TOption r)