summaryrefslogtreecommitdiff
path: root/src/Language
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2023-01-11 10:28:45 +0100
committerEugen Wissner <belka@caraus.de>2023-01-11 10:28:45 +0100
commit05fa5df55839c8abe155ca2e2d90de06cc32e642 (patch)
treec13b7e719e97ccb62a47f8ca5fd0309c6089ad8a /src/Language
parent9021f3a25d2b474160abae58cd98c4b6d08d87d0 (diff)
downloadgraphql-05fa5df55839c8abe155ca2e2d90de06cc32e642.tar.gz
Encode directive definitions
Diffstat (limited to 'src/Language')
-rw-r--r--src/Language/GraphQL/AST/Encoder.hs29
1 files changed, 20 insertions, 9 deletions
diff --git a/src/Language/GraphQL/AST/Encoder.hs b/src/Language/GraphQL/AST/Encoder.hs
index 1ee0c6c..4e4e414 100644
--- a/src/Language/GraphQL/AST/Encoder.hs
+++ b/src/Language/GraphQL/AST/Encoder.hs
@@ -29,6 +29,7 @@ import qualified Data.Text.Lazy.Builder as Builder
import Data.Text.Lazy.Builder.Int (decimal)
import Data.Text.Lazy.Builder.RealFloat (realFloat)
import qualified Language.GraphQL.AST.Document as Full
+import qualified Language.GraphQL.AST.DirectiveLocation as DirectiveLocation
-- | Instructs the encoder whether the GraphQL document should be minified or
-- pretty printed.
@@ -59,6 +60,9 @@ document formatter defs
typeSystemDefinition formatter typeSystemDefinition' : acc
executableDefinition _ acc = acc -- TODO: TypeSystemExtension missing.
+directiveLocation :: DirectiveLocation.DirectiveLocation -> Lazy.Text
+directiveLocation = Lazy.Text.pack . show
+
withLineBreak :: Formatter -> Lazy.Text.Text -> Lazy.Text.Text
withLineBreak formatter encodeDefinition
| Pretty _ <- formatter = Lazy.Text.snoc encodeDefinition '\n'
@@ -73,7 +77,13 @@ typeSystemDefinition formatter = \case
<> "schema "
<> bracesList formatter operationTypeDefinition (NonEmpty.toList operationTypeDefinitions')
Full.TypeDefinition typeDefinition' -> typeDefinition formatter typeDefinition'
- _ -> "" -- TODO: DerictiveDefinition missing.
+ Full.DirectiveDefinition description' name' arguments' locations
+ -> description formatter description'
+ <> "@"
+ <> Lazy.Text.fromStrict name' -- TODO: TypeSystemExtension missing.
+ <> argumentsDefinition formatter arguments'
+ <> " on"
+ <> pipeList formatter (directiveLocation <$> locations)
where
operationTypeDefinition (Full.OperationTypeDefinition operationType' namedType')
= indentLine (incrementIndent formatter)
@@ -174,16 +184,17 @@ implementsInterfaces (Full.ImplementsInterfaces interfaces)
unionMemberTypes :: Foldable t => Formatter -> Full.UnionMemberTypes t -> Lazy.Text
unionMemberTypes formatter (Full.UnionMemberTypes memberTypes)
| null memberTypes = mempty
- | Minified <- formatter = Lazy.Text.fromStrict
- $ Text.append "= "
- $ Text.intercalate " | "
- $ toList memberTypes
- | Pretty _ <- formatter
- = Lazy.Text.append "="
- $ Lazy.Text.concat
- $ (("\n" <> indentSymbol <> "| ") <>) . Lazy.Text.fromStrict
+ | otherwise = Lazy.Text.append "="
+ $ pipeList formatter
+ $ Lazy.Text.fromStrict
<$> toList memberTypes
+pipeList :: Foldable t => Formatter -> t Lazy.Text -> Lazy.Text
+pipeList Minified = (" " <>) . Lazy.Text.intercalate " | " . toList
+pipeList (Pretty _) = Lazy.Text.concat
+ . fmap (("\n" <> indentSymbol <> "| ") <>)
+ . toList
+
enumValueDefinition :: Formatter -> Full.EnumValueDefinition -> Lazy.Text
enumValueDefinition (Pretty _) enumValue =
let Full.EnumValueDefinition description' name' directives' = enumValue