|
47 | 47 | //! ```rust
|
48 | 48 | //! use apollo_parser::Parser;
|
49 | 49 | //!
|
50 |
| -//! fn main() { |
51 |
| -//! let input = "union SearchResult = Photo | Person | Cat | Dog"; |
52 |
| -//! let parser = Parser::new(input); |
53 |
| -//! let ast = parser.parse(); |
54 |
| -//! } |
| 50 | +//! let input = "union SearchResult = Photo | Person | Cat | Dog"; |
| 51 | +//! let parser = Parser::new(input); |
| 52 | +//! let ast = parser.parse(); |
55 | 53 | //! ```
|
56 | 54 | //!
|
57 | 55 | //! `apollo-parser` is built to be error-resilient. This means we don't abort parsing (or lexing) if an error occurs. That means `parser.parse()` will always produce an AST, and it will be accompanied by any errors that are encountered:
|
58 | 56 | //!
|
59 | 57 | //! ```rust
|
60 | 58 | //! use apollo_parser::Parser;
|
61 | 59 | //!
|
62 |
| -//! fn main() { |
63 |
| -//! let input = "union SearchResult = Photo | Person | Cat | Dog"; |
64 |
| -//! let parser = Parser::new(input); |
65 |
| -//! let ast = parser.parse(); |
| 60 | +//! let input = "union SearchResult = Photo | Person | Cat | Dog"; |
| 61 | +//! let parser = Parser::new(input); |
| 62 | +//! let ast = parser.parse(); |
66 | 63 | //!
|
67 |
| -//! // ast.errors() returns an errors slice encountered during lexing and parsing |
68 |
| -//! assert!(ast.errors().is_empty()); |
| 64 | +//! // ast.errors() returns an errors slice encountered during lexing and parsing |
| 65 | +//! assert!(ast.errors().is_empty()); |
69 | 66 | //!
|
70 |
| -//! // ast.document() get the Document, or root node, of the tree that you can |
71 |
| -//! // start iterating on. |
72 |
| -//! let doc = ast.document(); |
73 |
| -//! } |
| 67 | +//! // ast.document() get the Document, or root node, of the tree that you can |
| 68 | +//! // start iterating on. |
| 69 | +//! let doc = ast.document(); |
74 | 70 | //! ```
|
75 | 71 | //!
|
76 | 72 | //! ### Examples
|
|
90 | 86 | //! ```rust
|
91 | 87 | //! use apollo_parser::{ast, Parser};
|
92 | 88 | //!
|
93 |
| -//! fn main() { |
94 |
| -//! let input = " |
95 |
| -//! type ProductDimension { |
96 |
| -//! size: String |
97 |
| -//! weight: Float @tag(name: \"hi from inventory value type field\") |
98 |
| -//! } |
99 |
| -//! "; |
100 |
| -//! let parser = Parser::new(input); |
101 |
| -//! let ast = parser.parse(); |
102 |
| -//! assert!(ast.errors().is_empty()); |
103 |
| -//! |
104 |
| -//! let doc = ast.document(); |
105 |
| -//! |
106 |
| -//! for def in doc.definitions() { |
107 |
| -//! if let ast::Definition::ObjectTypeDefinition(object_type) = def { |
108 |
| -//! assert_eq!(object_type.name().unwrap().text(), "ProductDimension"); |
109 |
| -//! for field_def in object_type.fields_definition().unwrap().field_definitions() { |
110 |
| -//! println!("{}", field_def.name().unwrap().text()); // size weight |
111 |
| -//! } |
| 89 | +//! let input = " |
| 90 | +//! type ProductDimension { |
| 91 | +//! size: String |
| 92 | +//! weight: Float @tag(name: \"hi from inventory value type field\") |
| 93 | +//! } |
| 94 | +//! "; |
| 95 | +//! let parser = Parser::new(input); |
| 96 | +//! let ast = parser.parse(); |
| 97 | +//! assert!(ast.errors().is_empty()); |
| 98 | +//! |
| 99 | +//! let doc = ast.document(); |
| 100 | +//! |
| 101 | +//! for def in doc.definitions() { |
| 102 | +//! if let ast::Definition::ObjectTypeDefinition(object_type) = def { |
| 103 | +//! assert_eq!(object_type.name().unwrap().text(), "ProductDimension"); |
| 104 | +//! for field_def in object_type.fields_definition().unwrap().field_definitions() { |
| 105 | +//! println!("{}", field_def.name().unwrap().text()); // size weight |
112 | 106 | //! }
|
113 | 107 | //! }
|
114 | 108 | //! }
|
|
119 | 113 | //! ```rust
|
120 | 114 | //! use apollo_parser::{ast, Parser};
|
121 | 115 | //!
|
122 |
| -//! fn main() { |
123 |
| -//! let input = " |
124 |
| -//! query GraphQuery($graph_id: ID!, $variant: String) { |
125 |
| -//! service(id: $graph_id) { |
126 |
| -//! schema(tag: $variant) { |
127 |
| -//! document |
128 |
| -//! } |
129 |
| -//! } |
| 116 | +//! let input = " |
| 117 | +//! query GraphQuery($graph_id: ID!, $variant: String) { |
| 118 | +//! service(id: $graph_id) { |
| 119 | +//! schema(tag: $variant) { |
| 120 | +//! document |
130 | 121 | //! }
|
131 |
| -//! "; |
132 |
| -//! |
133 |
| -//! let parser = Parser::new(input); |
134 |
| -//! let ast = parser.parse(); |
135 |
| -//! assert!(&ast.errors().is_empty()); |
136 |
| -//! |
137 |
| -//! let doc = ast.document(); |
138 |
| -//! |
139 |
| -//! for def in doc.definitions() { |
140 |
| -//! if let ast::Definition::OperationDefinition(op_def) = def { |
141 |
| -//! assert_eq!(op_def.name().unwrap().text(), "GraphQuery"); |
142 |
| -//! |
143 |
| -//! let variable_defs = op_def.variable_definitions(); |
144 |
| -//! let variables: Vec<String> = variable_defs |
145 |
| -//! .iter() |
146 |
| -//! .map(|v| v.variable_definitions()) |
147 |
| -//! .flatten() |
148 |
| -//! .filter_map(|v| Some(v.variable()?.text().to_string())) |
149 |
| -//! .collect(); |
150 |
| -//! assert_eq!( |
151 |
| -//! variables.as_slice(), |
152 |
| -//! ["graph_id".to_string(), "variant".to_string()] |
153 |
| -//! ); |
154 |
| -//! } |
| 122 | +//! } |
| 123 | +//! } |
| 124 | +//! "; |
| 125 | +//! |
| 126 | +//! let parser = Parser::new(input); |
| 127 | +//! let ast = parser.parse(); |
| 128 | +//! assert!(&ast.errors().is_empty()); |
| 129 | +//! |
| 130 | +//! let doc = ast.document(); |
| 131 | +//! |
| 132 | +//! for def in doc.definitions() { |
| 133 | +//! if let ast::Definition::OperationDefinition(op_def) = def { |
| 134 | +//! assert_eq!(op_def.name().unwrap().text(), "GraphQuery"); |
| 135 | +//! |
| 136 | +//! let variable_defs = op_def.variable_definitions(); |
| 137 | +//! let variables: Vec<String> = variable_defs |
| 138 | +//! .iter() |
| 139 | +//! .map(|v| v.variable_definitions()) |
| 140 | +//! .flatten() |
| 141 | +//! .filter_map(|v| Some(v.variable()?.text().to_string())) |
| 142 | +//! .collect(); |
| 143 | +//! assert_eq!( |
| 144 | +//! variables.as_slice(), |
| 145 | +//! ["graph_id".to_string(), "variant".to_string()] |
| 146 | +//! ); |
155 | 147 | //! }
|
156 | 148 | //! }
|
157 | 149 | //! ```
|
|
0 commit comments