Encode enums

This commit is contained in:
Eugen Wissner 2023-01-09 20:56:21 +01:00
parent ab4808c44d
commit 025331a9ee
Signed by: belka
GPG Key ID: A27FDC1E8EE902C0
2 changed files with 42 additions and 1 deletions

View File

@ -135,6 +135,13 @@ typeDefinition formatter = \case
<> optempty (directives formatter) directives' <> optempty (directives formatter) directives'
<> eitherFormat formatter " " "" <> eitherFormat formatter " " ""
<> unionMemberTypes formatter members' <> 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. _typeDefinition' -> "" -- TODO: Types missing.
where where
nextFormatter = incrementIndent formatter nextFormatter = incrementIndent formatter
@ -160,6 +167,20 @@ unionMemberTypes formatter (Full.UnionMemberTypes memberTypes)
$ (("\n" <> indentSymbol <> "| ") <>) . Lazy.Text.fromStrict $ (("\n" <> indentSymbol <> "| ") <>) . Lazy.Text.fromStrict
<$> toList memberTypes <$> 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 -> Lazy.Text.Text
description _formatter (Full.Description Nothing) = "" description _formatter (Full.Description Nothing) = ""
description formatter (Full.Description (Just description')) = description formatter (Full.Description (Just description')) =

View File

@ -218,7 +218,7 @@ spec = do
actual = typeSystemDefinition pretty definition' actual = typeSystemDefinition pretty definition'
in actual `shouldBe` expected in actual `shouldBe` expected
it "encodes an enum definition" $ it "encodes an union definition" $
let definition' = Full.TypeDefinition let definition' = Full.TypeDefinition
$ Full.UnionTypeDefinition mempty "SearchResult" mempty $ Full.UnionTypeDefinition mempty "SearchResult" mempty
$ Full.UnionMemberTypes ["Photo", "Person"] $ Full.UnionMemberTypes ["Photo", "Person"]
@ -229,3 +229,23 @@ spec = do
|] |]
actual = typeSystemDefinition pretty definition' actual = typeSystemDefinition pretty definition'
in actual `shouldBe` expected 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