summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md1
-rw-r--r--src/Language/GraphQL/AST/Core.hs1
-rw-r--r--src/Language/GraphQL/Execute/Coerce.hs5
-rw-r--r--src/Language/GraphQL/Execute/Execution.hs1
-rw-r--r--src/Language/GraphQL/Execute/Transform.hs1
-rw-r--r--src/Language/GraphQL/Trans.hs1
-rw-r--r--src/Language/GraphQL/Type/Definition.hs7
-rw-r--r--src/Language/GraphQL/Type/Directive.hs1
-rw-r--r--src/Language/GraphQL/Type/Out.hs2
-rw-r--r--tests/Language/GraphQL/Execute/CoerceSpec.hs9
-rw-r--r--tests/Test/StarWars/Schema.hs10
11 files changed, 26 insertions, 13 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f7bcf4d..ce71877 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -55,6 +55,7 @@ and this project adheres to
made private. These types describe intermediate representation used by the
executor internally. Moving was required to avoid cyclic dependencies between
the executor and type system.
+- `AST.Core` doesn't reexports anything.
## [0.7.0.0] - 2020-05-11
### Fixed
diff --git a/src/Language/GraphQL/AST/Core.hs b/src/Language/GraphQL/AST/Core.hs
index 59d43eb..0fe3e03 100644
--- a/src/Language/GraphQL/AST/Core.hs
+++ b/src/Language/GraphQL/AST/Core.hs
@@ -1,7 +1,6 @@
-- | This is the AST meant to be executed.
module Language.GraphQL.AST.Core
( Arguments(..)
- , Name
) where
import Data.HashMap.Strict (HashMap)
diff --git a/src/Language/GraphQL/Execute/Coerce.hs b/src/Language/GraphQL/Execute/Coerce.hs
index ab4099c..b550bea 100644
--- a/src/Language/GraphQL/Execute/Coerce.hs
+++ b/src/Language/GraphQL/Execute/Coerce.hs
@@ -14,9 +14,8 @@ import qualified Data.HashMap.Strict as HashMap
import qualified Data.Text.Lazy as Text.Lazy
import qualified Data.Text.Lazy.Builder as Text.Builder
import qualified Data.Text.Lazy.Builder.Int as Text.Builder
-import qualified Data.Set as Set
import Data.Scientific (toBoundedInteger, toRealFloat)
-import Language.GraphQL.AST.Core
+import Language.GraphQL.AST (Name)
import qualified Language.GraphQL.Type.In as In
import Language.GraphQL.Type.Definition
@@ -147,7 +146,7 @@ coerceInputLiteral (In.ScalarBaseType type') value
coerceInputLiteral (In.EnumBaseType type') (Enum enumValue)
| member enumValue type' = Just $ Enum enumValue
where
- member value (EnumType _ _ members) = Set.member value members
+ member value (EnumType _ _ members) = HashMap.member value members
coerceInputLiteral (In.InputObjectBaseType type') (Object values) =
let (In.InputObjectType _ _ inputFields) = type'
in Object
diff --git a/src/Language/GraphQL/Execute/Execution.hs b/src/Language/GraphQL/Execute/Execution.hs
index 8a3f400..a46316f 100644
--- a/src/Language/GraphQL/Execute/Execution.hs
+++ b/src/Language/GraphQL/Execute/Execution.hs
@@ -19,6 +19,7 @@ import Data.Sequence (Seq(..))
import Data.Text (Text)
import qualified Data.Text as Text
import qualified Data.Sequence as Seq
+import Language.GraphQL.AST (Name)
import Language.GraphQL.AST.Core
import Language.GraphQL.Error
import Language.GraphQL.Execute.Coerce
diff --git a/src/Language/GraphQL/Execute/Transform.hs b/src/Language/GraphQL/Execute/Transform.hs
index 8364105..315136c 100644
--- a/src/Language/GraphQL/Execute/Transform.hs
+++ b/src/Language/GraphQL/Execute/Transform.hs
@@ -43,6 +43,7 @@ import Data.Sequence (Seq, (<|), (><))
import Data.Text (Text)
import qualified Data.Text as Text
import qualified Language.GraphQL.AST as Full
+import Language.GraphQL.AST (Name)
import Language.GraphQL.AST.Core
import Language.GraphQL.Execute.Coerce
import Language.GraphQL.Type.Directive (Directive(..))
diff --git a/src/Language/GraphQL/Trans.hs b/src/Language/GraphQL/Trans.hs
index 7dc5523..fa7718a 100644
--- a/src/Language/GraphQL/Trans.hs
+++ b/src/Language/GraphQL/Trans.hs
@@ -14,6 +14,7 @@ import Control.Monad.Trans.Reader (ReaderT, asks)
import qualified Data.HashMap.Strict as HashMap
import Data.Maybe (fromMaybe)
import Data.Text (Text)
+import Language.GraphQL.AST (Name)
import Language.GraphQL.AST.Core
import Language.GraphQL.Type.Definition
import Prelude hiding (lookup)
diff --git a/src/Language/GraphQL/Type/Definition.hs b/src/Language/GraphQL/Type/Definition.hs
index 0f92857..411a7b3 100644
--- a/src/Language/GraphQL/Type/Definition.hs
+++ b/src/Language/GraphQL/Type/Definition.hs
@@ -3,6 +3,7 @@
-- | Types that can be used as both input and output types.
module Language.GraphQL.Type.Definition
( EnumType(..)
+ , EnumValue(..)
, ScalarType(..)
, Subs
, Value(..)
@@ -15,7 +16,6 @@ module Language.GraphQL.Type.Definition
import Data.Int (Int32)
import Data.HashMap.Strict (HashMap)
-import Data.Set (Set)
import Data.String (IsString(..))
import Data.Text (Text)
import Language.GraphQL.AST.Document (Name)
@@ -51,7 +51,10 @@ data ScalarType = ScalarType Name (Maybe Text)
-- Some leaf values of requests and input values are Enums. GraphQL serializes
-- Enum values as strings, however internally Enums can be represented by any
-- kind of type, often integers.
-data EnumType = EnumType Name (Maybe Text) (Set Text)
+data EnumType = EnumType Name (Maybe Text) (HashMap Name EnumValue)
+
+-- | Enum value is a single member of an 'EnumType'.
+newtype EnumValue = EnumValue (Maybe Text)
-- | The @String@ scalar type represents textual data, represented as UTF-8
-- character sequences. The String type is most often used by GraphQL to
diff --git a/src/Language/GraphQL/Type/Directive.hs b/src/Language/GraphQL/Type/Directive.hs
index 261bf04..017132c 100644
--- a/src/Language/GraphQL/Type/Directive.hs
+++ b/src/Language/GraphQL/Type/Directive.hs
@@ -6,6 +6,7 @@ module Language.GraphQL.Type.Directive
) where
import qualified Data.HashMap.Strict as HashMap
+import Language.GraphQL.AST (Name)
import Language.GraphQL.AST.Core
import Language.GraphQL.Type.Definition
diff --git a/src/Language/GraphQL/Type/Out.hs b/src/Language/GraphQL/Type/Out.hs
index acd348c..9367d54 100644
--- a/src/Language/GraphQL/Type/Out.hs
+++ b/src/Language/GraphQL/Type/Out.hs
@@ -24,7 +24,7 @@ module Language.GraphQL.Type.Out
import Data.HashMap.Strict (HashMap)
import Data.Text (Text)
-import Language.GraphQL.AST.Core
+import Language.GraphQL.AST (Name)
import Language.GraphQL.Trans
import Language.GraphQL.Type.Definition
import qualified Language.GraphQL.Type.In as In
diff --git a/tests/Language/GraphQL/Execute/CoerceSpec.hs b/tests/Language/GraphQL/Execute/CoerceSpec.hs
index 15180fb..d800230 100644
--- a/tests/Language/GraphQL/Execute/CoerceSpec.hs
+++ b/tests/Language/GraphQL/Execute/CoerceSpec.hs
@@ -9,7 +9,6 @@ import qualified Data.Aeson.Types as Aeson
import qualified Data.HashMap.Strict as HashMap
import Data.Maybe (isNothing)
import Data.Scientific (scientific)
-import qualified Data.Set as Set
import Language.GraphQL.Execute.Coerce
import Language.GraphQL.Type.Definition
import qualified Language.GraphQL.Type.In as In
@@ -17,8 +16,12 @@ import Prelude hiding (id)
import Test.Hspec (Spec, describe, it, shouldBe, shouldSatisfy)
direction :: EnumType
-direction = EnumType "Direction" Nothing
- $ Set.fromList ["NORTH", "EAST", "SOUTH", "WEST"]
+direction = EnumType "Direction" Nothing $ HashMap.fromList
+ [ ("NORTH", EnumValue Nothing)
+ , ("EAST", EnumValue Nothing)
+ , ("SOUTH", EnumValue Nothing)
+ , ("WEST", EnumValue Nothing)
+ ]
singletonInputObject :: In.Type
singletonInputObject = In.NamedInputObjectType type'
diff --git a/tests/Test/StarWars/Schema.hs b/tests/Test/StarWars/Schema.hs
index d787a07..6296461 100644
--- a/tests/Test/StarWars/Schema.hs
+++ b/tests/Test/StarWars/Schema.hs
@@ -11,7 +11,6 @@ import Data.Functor.Identity (Identity)
import qualified Data.HashMap.Strict as HashMap
import Data.Maybe (catMaybes)
import Data.Text (Text)
-import qualified Data.Set as Set
import Language.GraphQL.Trans
import Language.GraphQL.Type.Definition
import qualified Language.GraphQL.Type.In as In
@@ -86,8 +85,13 @@ idField f = do
pure $ v' HashMap.! f
episodeEnum :: EnumType
-episodeEnum = EnumType "Episode" Nothing
- $ Set.fromList ["NEW_HOPE", "EMPIRE", "JEDI"]
+episodeEnum = EnumType "Episode" (Just description)
+ $ HashMap.fromList [newHope, empire, jedi]
+ where
+ description = "One of the films in the Star Wars Trilogy"
+ newHope = ("NEW_HOPE", EnumValue $ Just "Released in 1977.")
+ empire = ("EMPIRE", EnumValue $ Just "Released in 1980.")
+ jedi = ("JEDI", EnumValue $ Just "Released in 1983.")
hero :: ActionT Identity Value
hero = do