From bc6a7dddd1f4db7a6e43085abdd25a5a4c8692cb Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Thu, 18 Jul 2019 05:10:02 +0200 Subject: [PATCH] Reuse common types from AST.Core --- src/Language/GraphQL/AST.hs | 58 ++++++++------------------- src/Language/GraphQL/AST/Core.hs | 4 +- src/Language/GraphQL/AST/Transform.hs | 5 +-- src/Language/GraphQL/Encoder.hs | 8 ++-- src/Language/GraphQL/Parser.hs | 4 +- 5 files changed, 26 insertions(+), 53 deletions(-) diff --git a/src/Language/GraphQL/AST.hs b/src/Language/GraphQL/AST.hs index e0a30e6..667e4d7 100644 --- a/src/Language/GraphQL/AST.hs +++ b/src/Language/GraphQL/AST.hs @@ -6,7 +6,6 @@ module Language.GraphQL.AST ( Alias , Argument(..) , Arguments - , DefaultValue , Definition(..) , Directive(..) , Directives @@ -16,11 +15,9 @@ module Language.GraphQL.AST , FragmentName , FragmentSpread(..) , InlineFragment(..) - , ListValue , Name , NonNullType(..) , ObjectField(..) - , ObjectValue , OperationDefinition(..) , OperationType(..) , Selection(..) @@ -29,7 +26,6 @@ module Language.GraphQL.AST , Type(..) , TypeCondition , Value(..) - , Variable , VariableDefinition(..) , VariableDefinitions ) where @@ -37,10 +33,9 @@ module Language.GraphQL.AST import Data.Int (Int32) import Data.List.NonEmpty (NonEmpty) import Data.Text (Text) - --- * Name - -type Name = Text +import Language.GraphQL.AST.Core ( Alias + , Name + ) -- * Document @@ -78,8 +73,6 @@ data Selection = SelectionField Field data Field = Field (Maybe Alias) Name Arguments Directives SelectionSetOpt deriving (Eq,Show) -type Alias = Name - -- * Arguments type Arguments = [Argument] @@ -101,48 +94,29 @@ type FragmentName = Name type TypeCondition = Name --- Input Values +-- * Input values -data Value = ValueVariable Variable - | ValueInt IntValue - | ValueFloat FloatValue - | ValueString StringValue - | ValueBoolean BooleanValue +data Value = ValueVariable Name + | ValueInt Int32 + | ValueFloat Double + | ValueString Text + | ValueBoolean Bool | ValueNull - | ValueEnum EnumValue - | ValueList ListValue - | ValueObject ObjectValue - deriving (Eq,Show) + | ValueEnum Name + | ValueList [Value] + | ValueObject [ObjectField] + deriving (Eq, Show) -type IntValue = Int32 - --- GraphQL Float is double precison -type FloatValue = Double - -type StringValue = Text - -type BooleanValue = Bool - -type EnumValue = Name - -type ListValue = [Value] - -type ObjectValue = [ObjectField] - -data ObjectField = ObjectField Name Value deriving (Eq,Show) +data ObjectField = ObjectField Name Value deriving (Eq, Show) -- * Variables type VariableDefinitions = [VariableDefinition] -data VariableDefinition = VariableDefinition Variable Type (Maybe DefaultValue) +data VariableDefinition = VariableDefinition Name Type (Maybe Value) deriving (Eq,Show) -type Variable = Name - -type DefaultValue = Value - --- * Input Types +-- * Input types data Type = TypeNamed Name | TypeList Type diff --git a/src/Language/GraphQL/AST/Core.hs b/src/Language/GraphQL/AST/Core.hs index eb4e505..00072e0 100644 --- a/src/Language/GraphQL/AST/Core.hs +++ b/src/Language/GraphQL/AST/Core.hs @@ -1,6 +1,7 @@ -- | This is the AST meant to be executed. module Language.GraphQL.AST.Core - ( Argument(..) + ( Alias + , Argument(..) , Document , Field(..) , Name @@ -15,6 +16,7 @@ import Data.String import Data.Text (Text) +-- | Name type Name = Text type Document = NonEmpty Operation diff --git a/src/Language/GraphQL/AST/Transform.hs b/src/Language/GraphQL/AST/Transform.hs index 94c3792..64670db 100644 --- a/src/Language/GraphQL/AST/Transform.hs +++ b/src/Language/GraphQL/AST/Transform.hs @@ -10,16 +10,13 @@ import Data.Either (partitionEithers) import Data.Foldable (fold, foldMap) import qualified Data.List.NonEmpty as NonEmpty import Data.Monoid (Alt(Alt,getAlt), (<>)) -import Data.Text (Text) import qualified Language.GraphQL.AST as Full import qualified Language.GraphQL.AST.Core as Core import qualified Language.GraphQL.Schema as Schema -type Name = Text - -- | Replaces a fragment name by a list of 'Field'. If the name doesn't match an -- empty list is returned. -type Fragmenter = Name -> [Core.Field] +type Fragmenter = Core.Name -> [Core.Field] -- TODO: Replace Maybe by MonadThrow with CustomError document :: Schema.Subs -> Full.Document -> Maybe Core.Document diff --git a/src/Language/GraphQL/Encoder.hs b/src/Language/GraphQL/Encoder.hs index 266f314..c315091 100644 --- a/src/Language/GraphQL/Encoder.hs +++ b/src/Language/GraphQL/Encoder.hs @@ -41,10 +41,10 @@ variableDefinition :: VariableDefinition -> Text variableDefinition (VariableDefinition var ty dv) = variable var <> ":" <> type_ ty <> maybe mempty defaultValue dv -defaultValue :: DefaultValue -> Text +defaultValue :: Value -> Text defaultValue val = "=" <> value val -variable :: Variable -> Text +variable :: Name -> Text variable var = "$" <> var selectionSet :: SelectionSet -> Text @@ -113,10 +113,10 @@ booleanValue False = "false" stringValue :: Text -> Text stringValue = quotes -listValue :: ListValue -> Text +listValue :: [Value] -> Text listValue = bracketsCommas value -objectValue :: ObjectValue -> Text +objectValue :: [ObjectField] -> Text objectValue = bracesCommas objectField objectField :: ObjectField -> Text diff --git a/src/Language/GraphQL/Parser.hs b/src/Language/GraphQL/Parser.hs index a773a05..f18621a 100644 --- a/src/Language/GraphQL/Parser.hs +++ b/src/Language/GraphQL/Parser.hs @@ -140,10 +140,10 @@ variableDefinition = VariableDefinition <$> variable <* colon <*> type_ <*> optional defaultValue -variable :: Parser Variable +variable :: Parser Name variable = dollar *> name -defaultValue :: Parser DefaultValue +defaultValue :: Parser Value defaultValue = equals *> value -- * Input Types