Export resolver exceptions

This commit is contained in:
Eugen Wissner 2023-04-20 12:51:18 +02:00
parent 1b9d8af932
commit 4bd243b7ec
Signed by: belka
GPG Key ID: A27FDC1E8EE902C0
4 changed files with 9 additions and 8 deletions

View File

@ -9,6 +9,9 @@ and this project adheres to
## [Unreleased]
### Added
- `ToGraphQL` and `FromGraphQL` instances for `Word`.
- `Resolver`: Export `ServerException`.
- `Resolver.defaultResolver`: Throw `FieldNotResolvedException` if the requested
field is not in the parent object.
## [1.0.1.0] - 2023-02-17
### Added

View File

@ -1,4 +0,0 @@
packages:
.
constraints: graphql -json

View File

@ -38,7 +38,7 @@ library
containers ^>= 0.6.2,
exceptions ^>= 0.10.4,
hspec-expectations >= 0.8.2 && < 0.9,
graphql >= 1.0,
graphql >= 1.2,
megaparsec >= 9.0 && < 10,
scientific ^>= 0.3.7,
text >= 1.2 && < 3,

View File

@ -6,13 +6,14 @@
-- | Helper functions and exceptions to write resolvers.
module Language.GraphQL.Resolver
( argument
( ServerException(..)
, argument
, defaultResolver
) where
import Control.Monad.Catch (Exception(..), MonadCatch(..), MonadThrow(..))
import Control.Monad.Trans.Reader (ReaderT, asks)
import Data.HashMap.Strict ((!))
import qualified Data.HashMap.Strict as HashMap
import Data.Text (Text)
import qualified Data.Text as Text
import Data.Typeable (cast)
@ -49,7 +50,8 @@ defaultResolver :: MonadCatch m => Name -> Type.Resolve m
defaultResolver fieldName = do
values' <- asks Type.values
case values' of
Type.Object objectValue -> pure $ objectValue ! fieldName
Type.Object objectValue
| Just result <- HashMap.lookup fieldName objectValue -> pure result
_nonObject -> throwM $ FieldNotResolvedException fieldName
-- | Takes an argument name, validates that the argument exists, and optionally