diff options
| author | Eugen Wissner <belka@caraus.de> | 2023-02-25 10:15:22 +0100 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2023-02-25 10:15:22 +0100 |
| commit | 83f2dc1a2d4820a9d58618ff4d3724db420fe3b6 (patch) | |
| tree | fa3594676bafc37cca24956c0153547516a5ef89 /src | |
| parent | 3b0da4f3d75f2edf60a0a29a015aab1ae14338da (diff) | |
| download | graphql-83f2dc1a2d4820a9d58618ff4d3724db420fe3b6.tar.gz | |
Encode type extensions
Diffstat (limited to 'src')
| -rw-r--r-- | src/Language/GraphQL/AST/Encoder.hs | 64 |
1 files changed, 63 insertions, 1 deletions
diff --git a/src/Language/GraphQL/AST/Encoder.hs b/src/Language/GraphQL/AST/Encoder.hs index 93b4efc..120fb64 100644 --- a/src/Language/GraphQL/AST/Encoder.hs +++ b/src/Language/GraphQL/AST/Encoder.hs @@ -86,7 +86,69 @@ schemaExtension formatter = \case <> optempty (directives formatter) (NonEmpty.toList operationDirectives) typeExtension :: Formatter -> Full.TypeExtension -> Lazy.Text -typeExtension = const $ const "" -- TODO: Type extensions missing. +typeExtension formatter = \case + Full.ScalarTypeExtension name' directives' + -> "extend scalar " + <> Lazy.Text.fromStrict name' + <> directives formatter (NonEmpty.toList directives') + Full.ObjectTypeFieldsDefinitionExtension name' ifaces' directives' fields' + -> "extend type " + <> Lazy.Text.fromStrict name' + <> optempty (" " <>) (implementsInterfaces ifaces') + <> optempty (directives formatter) directives' + <> eitherFormat formatter " " "" + <> bracesList formatter (fieldDefinition nextFormatter) (NonEmpty.toList fields') + Full.ObjectTypeDirectivesExtension name' ifaces' directives' + -> "extend type " + <> Lazy.Text.fromStrict name' + <> optempty (" " <>) (implementsInterfaces ifaces') + <> optempty (directives formatter) (NonEmpty.toList directives') + Full.ObjectTypeImplementsInterfacesExtension name' ifaces' + -> "extend type " + <> Lazy.Text.fromStrict name' + <> optempty (" " <>) (implementsInterfaces ifaces') + Full.InterfaceTypeFieldsDefinitionExtension name' directives' fields' + -> "extend interface " + <> Lazy.Text.fromStrict name' + <> optempty (directives formatter) directives' + <> eitherFormat formatter " " "" + <> bracesList formatter (fieldDefinition nextFormatter) (NonEmpty.toList fields') + Full.InterfaceTypeDirectivesExtension name' directives' + -> "extend interface " + <> Lazy.Text.fromStrict name' + <> optempty (directives formatter) (NonEmpty.toList directives') + Full.UnionTypeUnionMemberTypesExtension name' directives' members' + -> "extend union " + <> Lazy.Text.fromStrict name' + <> optempty (directives formatter) directives' + <> eitherFormat formatter " " "" + <> unionMemberTypes formatter members' + Full.UnionTypeDirectivesExtension name' directives' + -> "extend union " + <> Lazy.Text.fromStrict name' + <> optempty (directives formatter) (NonEmpty.toList directives') + Full.EnumTypeEnumValuesDefinitionExtension name' directives' members' + -> "extend enum " + <> Lazy.Text.fromStrict name' + <> optempty (directives formatter) directives' + <> eitherFormat formatter " " "" + <> bracesList formatter (enumValueDefinition formatter) (NonEmpty.toList members') + Full.EnumTypeDirectivesExtension name' directives' + -> "extend enum " + <> Lazy.Text.fromStrict name' + <> optempty (directives formatter) (NonEmpty.toList directives') + Full.InputObjectTypeInputFieldsDefinitionExtension name' directives' fields' + -> "extend input " + <> Lazy.Text.fromStrict name' + <> optempty (directives formatter) directives' + <> eitherFormat formatter " " "" + <> bracesList formatter (inputValueDefinition nextFormatter) (NonEmpty.toList fields') + Full.InputObjectTypeDirectivesExtension name' directives' + -> "extend input " + <> Lazy.Text.fromStrict name' + <> optempty (directives formatter) (NonEmpty.toList directives') + where + nextFormatter = incrementIndent formatter -- | Converts a t'Full.TypeSystemDefinition' into a string. typeSystemDefinition :: Formatter -> Full.TypeSystemDefinition -> Lazy.Text |
