1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
//! AST types for representing parsed GraphQL documents.
//!
//! This AST structure provides a zero-copy AST for GraphQL documents. All node
//! types are parameterized over a `'src` lifetime that borrows strings
//! (whenever possible) from the source text via [`Cow<'src, str>`].
//!
//! Each AST node has two conceptual layers:
//!
//! - **Semantic layer** (always present): Typed structs with names,
//! values, directives, and all GraphQL semantics.
//!
//! - **Syntax layer** (optional): Each node has an
//! `Option<XyzSyntax<'src>>` field that, when populated, contains
//! keyword/punctuation tokens with their trivia (whitespace,
//! comments, commas). This enables lossless source reconstruction
//! for formatter and IDE tooling.
//!
//! # Example
//!
//! ```rust
//! use libgraphql_parser::ast;
//! use libgraphql_parser::GraphQLParser;
//!
//! // Parse a string into an AST
//! let parser = GraphQLParser::new("type Query { hello: String }");
//! let result = parser.parse_schema_document();
//!
//! // Extract the `Query` type definition
//! let doc: &ast::Document<'_> = result.valid().unwrap().0;
//! let query_def = match &doc.definitions[0] {
//! ast::Definition::TypeDefinition(
//! ast::TypeDefinition::Object(obj),
//! ) => obj,
//! _ => panic!("expected an object type definition"),
//! };
//!
//! // Count the number of fields on the `Query` object
//! let num_query_fields = query_def.fields.len();
//! # assert_eq!(num_query_fields, 1);
//! println!("The `Query` object has {num_query_fields} fields.");
//! ```
//!
//! [`Cow<'src, str>`]: std::borrow::Cow
//! [`ByteSpan`]: crate::ByteSpan
pub
pub use Argument;
pub use ArgumentSyntax;
pub use AstNode;
pub use BooleanValue;
pub use BooleanValueSyntax;
pub use Definition;
pub use DefinitionKind;
pub use DelimiterPair;
pub use DirectiveAnnotation;
pub use DirectiveAnnotationSyntax;
pub use DirectiveDefinition;
pub use DirectiveDefinitionSyntax;
pub use DirectiveLocation;
pub use DirectiveLocationKind;
pub use DirectiveLocationSyntax;
pub use Document;
pub use DocumentSyntax;
pub use DocumentKind;
pub use EnumTypeDefinition;
pub use EnumTypeDefinitionSyntax;
pub use EnumTypeExtension;
pub use EnumTypeExtensionSyntax;
pub use EnumValue;
pub use EnumValueSyntax;
pub use EnumValueDefinition;
pub use FieldSelection;
pub use FieldSelectionSyntax;
pub use FieldDefinition;
pub use FieldDefinitionSyntax;
pub use FloatValue;
pub use FloatValueSyntax;
pub use FragmentDefinition;
pub use FragmentDefinitionSyntax;
pub use FragmentSpread;
pub use FragmentSpreadSyntax;
pub use InlineFragment;
pub use InlineFragmentSyntax;
pub use InputObjectTypeDefinition;
pub use InputObjectTypeDefinitionSyntax;
pub use InputObjectTypeExtension;
pub use InputObjectTypeExtensionSyntax;
pub use InputValueDefinition;
pub use InputValueDefinitionSyntax;
pub use IntValue;
pub use IntValueSyntax;
pub use InterfaceTypeDefinition;
pub use InterfaceTypeDefinitionSyntax;
pub use InterfaceTypeExtension;
pub use InterfaceTypeExtensionSyntax;
pub use ListTypeAnnotation;
pub use ListTypeAnnotationSyntax;
pub use ListValue;
pub use ListValueSyntax;
pub use Name;
pub use NameSyntax;
pub use NamedTypeAnnotation;
pub use NullValue;
pub use NullValueSyntax;
pub use Nullability;
pub use ObjectField;
pub use ObjectFieldSyntax;
pub use ObjectTypeDefinition;
pub use ObjectTypeDefinitionSyntax;
pub use ObjectTypeExtension;
pub use ObjectTypeExtensionSyntax;
pub use ObjectValue;
pub use ObjectValueSyntax;
pub use OperationDefinition;
pub use OperationDefinitionSyntax;
pub use OperationKind;
pub use RootOperationTypeDefinition;
pub use RootOperationTypeDefinitionSyntax;
pub use ScalarTypeDefinition;
pub use ScalarTypeDefinitionSyntax;
pub use ScalarTypeExtension;
pub use ScalarTypeExtensionSyntax;
pub use SchemaDefinition;
pub use SchemaDefinitionSyntax;
pub use SchemaExtension;
pub use SchemaExtensionSyntax;
pub use Selection;
pub use SelectionSet;
pub use SelectionSetSyntax;
pub use StringValue;
pub use StringValueSyntax;
pub use TypeAnnotation;
pub use TypeCondition;
pub use TypeConditionSyntax;
pub use TypeDefinition;
pub use TypeExtension;
pub use UnionTypeDefinition;
pub use UnionTypeDefinitionSyntax;
pub use UnionTypeExtension;
pub use UnionTypeExtensionSyntax;
pub use Value;
pub use VariableDefinition;
pub use VariableDefinitionSyntax;
pub use VariableReference;
pub use VariableReferenceSyntax;