diff options
| author | Eugen Wissner <belka@caraus.de> | 2023-01-09 20:56:21 +0100 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2023-01-09 20:56:21 +0100 |
| commit | 025331a9ee07bd3080de6be0f5d514118052d1b5 (patch) | |
| tree | f8453793447e72f988fc8ad5089f76c1f734db69 | |
| parent | ab4808c44de3e5cda60887ede92c8cff0d62ee90 (diff) | |
| download | graphql-025331a9ee07bd3080de6be0f5d514118052d1b5.tar.gz | |
Encode enums
| -rw-r--r-- | src/Language/GraphQL/AST/Encoder.hs | 21 | ||||
| -rw-r--r-- | tests/Language/GraphQL/AST/EncoderSpec.hs | 22 |
2 files changed, 42 insertions, 1 deletions
diff --git a/src/Language/GraphQL/AST/Encoder.hs b/src/Language/GraphQL/AST/Encoder.hs index ab17929..b5265cc 100644 --- a/src/Language/GraphQL/AST/Encoder.hs +++ b/src/Language/GraphQL/AST/Encoder.hs @@ -135,6 +135,13 @@ typeDefinition formatter = \case <> optempty (directives formatter) directives' <> eitherFormat formatter " " "" <> unionMemberTypes formatter members' + Full.EnumTypeDefinition description' name' directives' members' + -> optempty (description formatter) description' + <> "enum " + <> Lazy.Text.fromStrict name' + <> optempty (directives formatter) directives' + <> eitherFormat formatter " " "" + <> bracesList formatter (enumValueDefinition formatter) members' _typeDefinition' -> "" -- TODO: Types missing. where nextFormatter = incrementIndent formatter @@ -160,6 +167,20 @@ unionMemberTypes formatter (Full.UnionMemberTypes memberTypes) $ (("\n" <> indentSymbol <> "| ") <>) . Lazy.Text.fromStrict <$> toList memberTypes +enumValueDefinition :: Formatter -> Full.EnumValueDefinition -> Lazy.Text +enumValueDefinition (Pretty _) enumValue = + let Full.EnumValueDefinition description' name' directives' = enumValue + formatter = Pretty 1 + in description formatter description' + <> indentLine formatter + <> Lazy.Text.fromStrict name' + <> directives formatter directives' +enumValueDefinition Minified enumValue = + let Full.EnumValueDefinition description' name' directives' = enumValue + in description Minified description' + <> Lazy.Text.fromStrict name' + <> directives Minified directives' + description :: Formatter -> Full.Description -> Lazy.Text.Text description _formatter (Full.Description Nothing) = "" description formatter (Full.Description (Just description')) = diff --git a/tests/Language/GraphQL/AST/EncoderSpec.hs b/tests/Language/GraphQL/AST/EncoderSpec.hs index 5116c0e..a4ba470 100644 --- a/tests/Language/GraphQL/AST/EncoderSpec.hs +++ b/tests/Language/GraphQL/AST/EncoderSpec.hs @@ -218,7 +218,7 @@ spec = do actual = typeSystemDefinition pretty definition' in actual `shouldBe` expected - it "encodes an enum definition" $ + it "encodes an union definition" $ let definition' = Full.TypeDefinition $ Full.UnionTypeDefinition mempty "SearchResult" mempty $ Full.UnionMemberTypes ["Photo", "Person"] @@ -229,3 +229,23 @@ spec = do |] actual = typeSystemDefinition pretty definition' in actual `shouldBe` expected + + it "encodes an enum definition" $ + let values = + [ Full.EnumValueDefinition mempty "NORTH" mempty + , Full.EnumValueDefinition mempty "EAST" mempty + , Full.EnumValueDefinition mempty "SOUTH" mempty + , Full.EnumValueDefinition mempty "WEST" mempty + ] + definition' = Full.TypeDefinition + $ Full.EnumTypeDefinition mempty "Direction" mempty values + expected = [gql| + enum Direction { + NORTH + EAST + SOUTH + WEST + } + |] + actual = typeSystemDefinition pretty definition' + in actual `shouldBe` expected |
