morpheus-graphql-0.18.0: test/Feature/NamedResolvers/Realms.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
module Feature.NamedResolvers.Realms
( realmsApp,
Deity,
Realm,
)
where
import Data.Morpheus
( deriveApp,
)
import Data.Morpheus.Document
( importGQLDocument,
)
import Data.Morpheus.NamedResolvers
( NamedResolverT,
ResolveNamed (..),
resolve,
)
import Data.Morpheus.Types
( App,
Arg (..),
ID,
NamedResolvers (..),
Undefined,
)
import Data.Text (Text)
importGQLDocument "test/Feature/NamedResolvers/realms.gql"
instance Monad m => ResolveNamed m (Realm (NamedResolverT m)) where
type Dep (Realm (NamedResolverT m)) = ID
resolveNamed "olympus" =
pure
Realm
{ name = resolve (pure "Mount Olympus"),
owner = resolve (pure "zeus")
}
resolveNamed "dreams" =
pure
Realm
{ name = resolve (pure "Fictional world of dreams"),
owner = resolve (pure "morpheus")
}
resolveNamed _ =
pure
Realm
{ name = resolve (pure "Unknown"),
owner = resolve (pure "none")
}
instance Monad m => ResolveNamed m (Deity (NamedResolverT m)) where
type Dep (Deity (NamedResolverT m)) = ID
resolveNamed "zeus" =
pure
Deity
{ realm = resolve (pure "olympus")
}
resolveNamed "morpheus" =
pure
Deity
{ realm = resolve (pure "dreams")
}
resolveNamed x =
pure
Deity
{ realm = resolve (pure x)
}
instance Monad m => ResolveNamed m (Query (NamedResolverT m)) where
type Dep (Query (NamedResolverT m)) = ()
resolveNamed () =
pure
Query
{ realm = \(Arg arg) -> resolve (pure (Just arg)),
realms = resolve (pure ["olympus", "dreams"])
}
realmsApp :: App () IO
realmsApp =
deriveApp
(NamedResolvers :: NamedResolvers IO () Query Undefined Undefined)