dejavu_parser/dejavu/
parse_ast.rs

1use super::*;
2#[automatically_derived]
3impl YggdrasilNode for RootNode {
4    type Rule = DejavuRule;
5
6    fn get_range(&self) -> Option<Range<usize>> {
7        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
8    }
9    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
10        let _span = pair.get_span();
11        Ok(Self {
12            element: pair.take_tagged_items::<ElementNode>(Cow::Borrowed("element")).collect::<Result<Vec<_>, _>>()?,
13            span: Range { start: _span.start() as u32, end: _span.end() as u32 },
14        })
15    }
16}
17#[automatically_derived]
18impl FromStr for RootNode {
19    type Err = YggdrasilError<DejavuRule>;
20
21    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
22        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::Root)?)
23    }
24}
25#[automatically_derived]
26impl YggdrasilNode for ElementNode {
27    type Rule = DejavuRule;
28
29    fn get_range(&self) -> Option<Range<usize>> {
30        match self {
31            Self::Export(s) => s.get_range(),
32            Self::For(s) => s.get_range(),
33            Self::If(s) => s.get_range(),
34            Self::Text(s) => s.get_range(),
35        }
36    }
37    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
38        let _span = pair.get_span();
39        if let Ok(s) = pair.take_tagged_one::<TemplateExportNode>(Cow::Borrowed("export")) {
40            return Ok(Self::Export(s));
41        }
42        if let Ok(s) = pair.take_tagged_one::<TemplateForNode>(Cow::Borrowed("for")) {
43            return Ok(Self::For(s));
44        }
45        if let Ok(s) = pair.take_tagged_one::<TemplateIfNode>(Cow::Borrowed("if")) {
46            return Ok(Self::If(s));
47        }
48        if let Ok(s) = pair.take_tagged_one::<TextManyNode>(Cow::Borrowed("text")) {
49            return Ok(Self::Text(s));
50        }
51        Err(YggdrasilError::invalid_node(DejavuRule::Element, _span))
52    }
53}
54#[automatically_derived]
55impl FromStr for ElementNode {
56    type Err = YggdrasilError<DejavuRule>;
57
58    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
59        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::Element)?)
60    }
61}
62#[automatically_derived]
63impl YggdrasilNode for TextManyNode {
64    type Rule = DejavuRule;
65
66    fn get_range(&self) -> Option<Range<usize>> {
67        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
68    }
69    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
70        let _span = pair.get_span();
71        Ok(Self {
72            text_element: pair
73                .take_tagged_items::<TextElementNode>(Cow::Borrowed("text_element"))
74                .collect::<Result<Vec<_>, _>>()?,
75            span: Range { start: _span.start() as u32, end: _span.end() as u32 },
76        })
77    }
78}
79#[automatically_derived]
80impl FromStr for TextManyNode {
81    type Err = YggdrasilError<DejavuRule>;
82
83    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
84        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::TextMany)?)
85    }
86}
87#[automatically_derived]
88impl YggdrasilNode for TextElementNode {
89    type Rule = DejavuRule;
90
91    fn get_range(&self) -> Option<Range<usize>> {
92        match self {
93            Self::Escape(s) => s.get_range(),
94            Self::TextSpace(s) => s.get_range(),
95            Self::TextWord(s) => s.get_range(),
96        }
97    }
98    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
99        let _span = pair.get_span();
100        if let Ok(s) = pair.take_tagged_one::<TemplateENode>(Cow::Borrowed("escape")) {
101            return Ok(Self::Escape(s));
102        }
103        if let Ok(s) = pair.take_tagged_one::<TextSpaceNode>(Cow::Borrowed("text_space")) {
104            return Ok(Self::TextSpace(s));
105        }
106        if let Ok(s) = pair.take_tagged_one::<TextWordNode>(Cow::Borrowed("text_word")) {
107            return Ok(Self::TextWord(s));
108        }
109        Err(YggdrasilError::invalid_node(DejavuRule::TextElement, _span))
110    }
111}
112#[automatically_derived]
113impl FromStr for TextElementNode {
114    type Err = YggdrasilError<DejavuRule>;
115
116    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
117        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::TextElement)?)
118    }
119}
120#[automatically_derived]
121impl YggdrasilNode for TemplateENode {
122    type Rule = DejavuRule;
123
124    fn get_range(&self) -> Option<Range<usize>> {
125        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
126    }
127    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
128        let _span = pair.get_span();
129        Ok(Self { span: Range { start: _span.start() as u32, end: _span.end() as u32 } })
130    }
131}
132#[automatically_derived]
133impl FromStr for TemplateENode {
134    type Err = YggdrasilError<DejavuRule>;
135
136    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
137        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::TEMPLATE_E)?)
138    }
139}
140#[automatically_derived]
141impl YggdrasilNode for TextSpaceNode {
142    type Rule = DejavuRule;
143
144    fn get_range(&self) -> Option<Range<usize>> {
145        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
146    }
147    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
148        let _span = pair.get_span();
149        Ok(Self { text: pair.get_string(), span: Range { start: _span.start() as u32, end: _span.end() as u32 } })
150    }
151}
152#[automatically_derived]
153impl FromStr for TextSpaceNode {
154    type Err = YggdrasilError<DejavuRule>;
155
156    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
157        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::TEXT_SPACE)?)
158    }
159}
160#[automatically_derived]
161impl YggdrasilNode for TextWordNode {
162    type Rule = DejavuRule;
163
164    fn get_range(&self) -> Option<Range<usize>> {
165        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
166    }
167    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
168        let _span = pair.get_span();
169        Ok(Self { text: pair.get_string(), span: Range { start: _span.start() as u32, end: _span.end() as u32 } })
170    }
171}
172#[automatically_derived]
173impl FromStr for TextWordNode {
174    type Err = YggdrasilError<DejavuRule>;
175
176    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
177        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::TEXT_WORD)?)
178    }
179}
180#[automatically_derived]
181impl YggdrasilNode for TemplateLNode {
182    type Rule = DejavuRule;
183
184    fn get_range(&self) -> Option<Range<usize>> {
185        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
186    }
187    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
188        let _span = pair.get_span();
189        Ok(Self {
190            space_control: pair.take_tagged_option::<SpaceControlNode>(Cow::Borrowed("space_control")),
191            span: Range { start: _span.start() as u32, end: _span.end() as u32 },
192        })
193    }
194}
195#[automatically_derived]
196impl FromStr for TemplateLNode {
197    type Err = YggdrasilError<DejavuRule>;
198
199    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
200        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::TEMPLATE_L)?)
201    }
202}
203#[automatically_derived]
204impl YggdrasilNode for TemplateRNode {
205    type Rule = DejavuRule;
206
207    fn get_range(&self) -> Option<Range<usize>> {
208        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
209    }
210    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
211        let _span = pair.get_span();
212        Ok(Self {
213            space_control: pair.take_tagged_option::<SpaceControlNode>(Cow::Borrowed("space_control")),
214            span: Range { start: _span.start() as u32, end: _span.end() as u32 },
215        })
216    }
217}
218#[automatically_derived]
219impl FromStr for TemplateRNode {
220    type Err = YggdrasilError<DejavuRule>;
221
222    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
223        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::TEMPLATE_R)?)
224    }
225}
226#[automatically_derived]
227impl YggdrasilNode for SpaceControlNode {
228    type Rule = DejavuRule;
229
230    fn get_range(&self) -> Option<Range<usize>> {
231        match self {
232            Self::Break0 => None,
233            Self::Break1 => None,
234            Self::Delete0 => None,
235            Self::Delete1 => None,
236            Self::Nothing => None,
237        }
238    }
239    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
240        let _span = pair.get_span();
241        if let Some(_) = pair.find_first_tag("break_0") {
242            return Ok(Self::Break0);
243        }
244        if let Some(_) = pair.find_first_tag("break_1") {
245            return Ok(Self::Break1);
246        }
247        if let Some(_) = pair.find_first_tag("delete_0") {
248            return Ok(Self::Delete0);
249        }
250        if let Some(_) = pair.find_first_tag("delete_1") {
251            return Ok(Self::Delete1);
252        }
253        if let Some(_) = pair.find_first_tag("nothing") {
254            return Ok(Self::Nothing);
255        }
256        Err(YggdrasilError::invalid_node(DejavuRule::SpaceControl, _span))
257    }
258}
259#[automatically_derived]
260impl FromStr for SpaceControlNode {
261    type Err = YggdrasilError<DejavuRule>;
262
263    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
264        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::SpaceControl)?)
265    }
266}
267#[automatically_derived]
268impl YggdrasilNode for KwEndNode {
269    type Rule = DejavuRule;
270
271    fn get_range(&self) -> Option<Range<usize>> {
272        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
273    }
274    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
275        let _span = pair.get_span();
276        Ok(Self { span: Range { start: _span.start() as u32, end: _span.end() as u32 } })
277    }
278}
279#[automatically_derived]
280impl FromStr for KwEndNode {
281    type Err = YggdrasilError<DejavuRule>;
282
283    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
284        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::KW_END)?)
285    }
286}
287#[automatically_derived]
288impl YggdrasilNode for TemplateExportNode {
289    type Rule = DejavuRule;
290
291    fn get_range(&self) -> Option<Range<usize>> {
292        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
293    }
294    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
295        let _span = pair.get_span();
296        Ok(Self { span: Range { start: _span.start() as u32, end: _span.end() as u32 } })
297    }
298}
299#[automatically_derived]
300impl FromStr for TemplateExportNode {
301    type Err = YggdrasilError<DejavuRule>;
302
303    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
304        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::TemplateExport)?)
305    }
306}
307#[automatically_derived]
308impl YggdrasilNode for ExportItemNode {
309    type Rule = DejavuRule;
310
311    fn get_range(&self) -> Option<Range<usize>> {
312        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
313    }
314    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
315        let _span = pair.get_span();
316        Ok(Self {
317            class: pair.take_tagged_option::<NamepathFreeNode>(Cow::Borrowed("class")),
318            language: pair.take_tagged_option::<IdentifierNode>(Cow::Borrowed("language")),
319            name: pair.take_tagged_one::<IdentifierNode>(Cow::Borrowed("name"))?,
320            span: Range { start: _span.start() as u32, end: _span.end() as u32 },
321        })
322    }
323}
324#[automatically_derived]
325impl FromStr for ExportItemNode {
326    type Err = YggdrasilError<DejavuRule>;
327
328    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
329        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::ExportItem)?)
330    }
331}
332#[automatically_derived]
333impl YggdrasilNode for KwExportNode {
334    type Rule = DejavuRule;
335
336    fn get_range(&self) -> Option<Range<usize>> {
337        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
338    }
339    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
340        let _span = pair.get_span();
341        Ok(Self { span: Range { start: _span.start() as u32, end: _span.end() as u32 } })
342    }
343}
344#[automatically_derived]
345impl FromStr for KwExportNode {
346    type Err = YggdrasilError<DejavuRule>;
347
348    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
349        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::KW_EXPORT)?)
350    }
351}
352#[automatically_derived]
353impl YggdrasilNode for KwClassNode {
354    type Rule = DejavuRule;
355
356    fn get_range(&self) -> Option<Range<usize>> {
357        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
358    }
359    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
360        let _span = pair.get_span();
361        Ok(Self { span: Range { start: _span.start() as u32, end: _span.end() as u32 } })
362    }
363}
364#[automatically_derived]
365impl FromStr for KwClassNode {
366    type Err = YggdrasilError<DejavuRule>;
367
368    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
369        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::KW_CLASS)?)
370    }
371}
372#[automatically_derived]
373impl YggdrasilNode for KwTraitNode {
374    type Rule = DejavuRule;
375
376    fn get_range(&self) -> Option<Range<usize>> {
377        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
378    }
379    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
380        let _span = pair.get_span();
381        Ok(Self { span: Range { start: _span.start() as u32, end: _span.end() as u32 } })
382    }
383}
384#[automatically_derived]
385impl FromStr for KwTraitNode {
386    type Err = YggdrasilError<DejavuRule>;
387
388    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
389        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::KW_TRAIT)?)
390    }
391}
392#[automatically_derived]
393impl YggdrasilNode for KwToNode {
394    type Rule = DejavuRule;
395
396    fn get_range(&self) -> Option<Range<usize>> {
397        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
398    }
399    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
400        let _span = pair.get_span();
401        Ok(Self { span: Range { start: _span.start() as u32, end: _span.end() as u32 } })
402    }
403}
404#[automatically_derived]
405impl FromStr for KwToNode {
406    type Err = YggdrasilError<DejavuRule>;
407
408    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
409        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::KW_TO)?)
410    }
411}
412#[automatically_derived]
413impl YggdrasilNode for KwByNode {
414    type Rule = DejavuRule;
415
416    fn get_range(&self) -> Option<Range<usize>> {
417        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
418    }
419    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
420        let _span = pair.get_span();
421        Ok(Self { span: Range { start: _span.start() as u32, end: _span.end() as u32 } })
422    }
423}
424#[automatically_derived]
425impl FromStr for KwByNode {
426    type Err = YggdrasilError<DejavuRule>;
427
428    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
429        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::KW_BY)?)
430    }
431}
432#[automatically_derived]
433impl YggdrasilNode for TemplateIfNode {
434    type Rule = DejavuRule;
435
436    fn get_range(&self) -> Option<Range<usize>> {
437        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
438    }
439    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
440        let _span = pair.get_span();
441        Ok(Self {
442            if_begin: pair.take_tagged_one::<IfBeginNode>(Cow::Borrowed("if_begin"))?,
443            if_else: pair.take_tagged_option::<IfElseNode>(Cow::Borrowed("if_else")),
444            if_else_if: pair.take_tagged_items::<IfElseIfNode>(Cow::Borrowed("if_else_if")).collect::<Result<Vec<_>, _>>()?,
445            if_end: pair.take_tagged_one::<IfEndNode>(Cow::Borrowed("if_end"))?,
446            span: Range { start: _span.start() as u32, end: _span.end() as u32 },
447        })
448    }
449}
450#[automatically_derived]
451impl FromStr for TemplateIfNode {
452    type Err = YggdrasilError<DejavuRule>;
453
454    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
455        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::TemplateIf)?)
456    }
457}
458#[automatically_derived]
459impl YggdrasilNode for IfBeginNode {
460    type Rule = DejavuRule;
461
462    fn get_range(&self) -> Option<Range<usize>> {
463        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
464    }
465    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
466        let _span = pair.get_span();
467        Ok(Self {
468            element: pair.take_tagged_items::<ElementNode>(Cow::Borrowed("element")).collect::<Result<Vec<_>, _>>()?,
469            expression: pair.take_tagged_one::<ExpressionNode>(Cow::Borrowed("expression"))?,
470            template_l: pair.take_tagged_one::<TemplateLNode>(Cow::Borrowed("template_l"))?,
471            template_r: pair.take_tagged_one::<TemplateRNode>(Cow::Borrowed("template_r"))?,
472            span: Range { start: _span.start() as u32, end: _span.end() as u32 },
473        })
474    }
475}
476#[automatically_derived]
477impl FromStr for IfBeginNode {
478    type Err = YggdrasilError<DejavuRule>;
479
480    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
481        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::IfBegin)?)
482    }
483}
484#[automatically_derived]
485impl YggdrasilNode for IfElseNode {
486    type Rule = DejavuRule;
487
488    fn get_range(&self) -> Option<Range<usize>> {
489        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
490    }
491    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
492        let _span = pair.get_span();
493        Ok(Self {
494            element: pair.take_tagged_items::<ElementNode>(Cow::Borrowed("element")).collect::<Result<Vec<_>, _>>()?,
495            template_l: pair.take_tagged_one::<TemplateLNode>(Cow::Borrowed("template_l"))?,
496            template_r: pair.take_tagged_one::<TemplateRNode>(Cow::Borrowed("template_r"))?,
497            span: Range { start: _span.start() as u32, end: _span.end() as u32 },
498        })
499    }
500}
501#[automatically_derived]
502impl FromStr for IfElseNode {
503    type Err = YggdrasilError<DejavuRule>;
504
505    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
506        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::IfElse)?)
507    }
508}
509#[automatically_derived]
510impl YggdrasilNode for IfElseIfNode {
511    type Rule = DejavuRule;
512
513    fn get_range(&self) -> Option<Range<usize>> {
514        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
515    }
516    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
517        let _span = pair.get_span();
518        Ok(Self {
519            element: pair.take_tagged_items::<ElementNode>(Cow::Borrowed("element")).collect::<Result<Vec<_>, _>>()?,
520            expression: pair.take_tagged_one::<ExpressionNode>(Cow::Borrowed("expression"))?,
521            template_l: pair.take_tagged_one::<TemplateLNode>(Cow::Borrowed("template_l"))?,
522            template_r: pair.take_tagged_one::<TemplateRNode>(Cow::Borrowed("template_r"))?,
523            span: Range { start: _span.start() as u32, end: _span.end() as u32 },
524        })
525    }
526}
527#[automatically_derived]
528impl FromStr for IfElseIfNode {
529    type Err = YggdrasilError<DejavuRule>;
530
531    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
532        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::IfElseIf)?)
533    }
534}
535#[automatically_derived]
536impl YggdrasilNode for IfEndNode {
537    type Rule = DejavuRule;
538
539    fn get_range(&self) -> Option<Range<usize>> {
540        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
541    }
542    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
543        let _span = pair.get_span();
544        Ok(Self {
545            template_l: pair.take_tagged_one::<TemplateLNode>(Cow::Borrowed("template_l"))?,
546            template_r: pair.take_tagged_one::<TemplateRNode>(Cow::Borrowed("template_r"))?,
547            span: Range { start: _span.start() as u32, end: _span.end() as u32 },
548        })
549    }
550}
551#[automatically_derived]
552impl FromStr for IfEndNode {
553    type Err = YggdrasilError<DejavuRule>;
554
555    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
556        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::IfEnd)?)
557    }
558}
559#[automatically_derived]
560impl YggdrasilNode for KwIfNode {
561    type Rule = DejavuRule;
562
563    fn get_range(&self) -> Option<Range<usize>> {
564        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
565    }
566    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
567        let _span = pair.get_span();
568        Ok(Self { span: Range { start: _span.start() as u32, end: _span.end() as u32 } })
569    }
570}
571#[automatically_derived]
572impl FromStr for KwIfNode {
573    type Err = YggdrasilError<DejavuRule>;
574
575    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
576        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::KW_IF)?)
577    }
578}
579#[automatically_derived]
580impl YggdrasilNode for KwElseNode {
581    type Rule = DejavuRule;
582
583    fn get_range(&self) -> Option<Range<usize>> {
584        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
585    }
586    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
587        let _span = pair.get_span();
588        Ok(Self { span: Range { start: _span.start() as u32, end: _span.end() as u32 } })
589    }
590}
591#[automatically_derived]
592impl FromStr for KwElseNode {
593    type Err = YggdrasilError<DejavuRule>;
594
595    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
596        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::KW_ELSE)?)
597    }
598}
599#[automatically_derived]
600impl YggdrasilNode for TemplateForNode {
601    type Rule = DejavuRule;
602
603    fn get_range(&self) -> Option<Range<usize>> {
604        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
605    }
606    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
607        let _span = pair.get_span();
608        Ok(Self {
609            for_begin: pair.take_tagged_one::<ForBeginNode>(Cow::Borrowed("for_begin"))?,
610            for_else: pair.take_tagged_option::<ForElseNode>(Cow::Borrowed("for_else")),
611            for_end: pair.take_tagged_one::<ForEndNode>(Cow::Borrowed("for_end"))?,
612            span: Range { start: _span.start() as u32, end: _span.end() as u32 },
613        })
614    }
615}
616#[automatically_derived]
617impl FromStr for TemplateForNode {
618    type Err = YggdrasilError<DejavuRule>;
619
620    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
621        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::TemplateFor)?)
622    }
623}
624#[automatically_derived]
625impl YggdrasilNode for ForBeginNode {
626    type Rule = DejavuRule;
627
628    fn get_range(&self) -> Option<Range<usize>> {
629        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
630    }
631    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
632        let _span = pair.get_span();
633        Ok(Self {
634            element: pair.take_tagged_items::<ElementNode>(Cow::Borrowed("element")).collect::<Result<Vec<_>, _>>()?,
635            kw_in: pair.take_tagged_items::<KwInNode>(Cow::Borrowed("kw_in")).collect::<Result<Vec<_>, _>>()?,
636            pattern: pair.take_tagged_one::<PatternNode>(Cow::Borrowed("pattern"))?,
637            template_l: pair.take_tagged_one::<TemplateLNode>(Cow::Borrowed("template_l"))?,
638            template_r: pair.take_tagged_one::<TemplateRNode>(Cow::Borrowed("template_r"))?,
639            condition: pair.take_tagged_option::<ExpressionNode>(Cow::Borrowed("condition")),
640            iterator: pair.take_tagged_one::<ExpressionNode>(Cow::Borrowed("iterator"))?,
641            span: Range { start: _span.start() as u32, end: _span.end() as u32 },
642        })
643    }
644}
645#[automatically_derived]
646impl FromStr for ForBeginNode {
647    type Err = YggdrasilError<DejavuRule>;
648
649    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
650        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::ForBegin)?)
651    }
652}
653#[automatically_derived]
654impl YggdrasilNode for ForElseNode {
655    type Rule = DejavuRule;
656
657    fn get_range(&self) -> Option<Range<usize>> {
658        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
659    }
660    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
661        let _span = pair.get_span();
662        Ok(Self {
663            element: pair.take_tagged_items::<ElementNode>(Cow::Borrowed("element")).collect::<Result<Vec<_>, _>>()?,
664            template_l: pair.take_tagged_one::<TemplateLNode>(Cow::Borrowed("template_l"))?,
665            template_r: pair.take_tagged_one::<TemplateRNode>(Cow::Borrowed("template_r"))?,
666            span: Range { start: _span.start() as u32, end: _span.end() as u32 },
667        })
668    }
669}
670#[automatically_derived]
671impl FromStr for ForElseNode {
672    type Err = YggdrasilError<DejavuRule>;
673
674    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
675        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::ForElse)?)
676    }
677}
678#[automatically_derived]
679impl YggdrasilNode for ForEndNode {
680    type Rule = DejavuRule;
681
682    fn get_range(&self) -> Option<Range<usize>> {
683        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
684    }
685    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
686        let _span = pair.get_span();
687        Ok(Self {
688            template_l: pair.take_tagged_one::<TemplateLNode>(Cow::Borrowed("template_l"))?,
689            template_r: pair.take_tagged_one::<TemplateRNode>(Cow::Borrowed("template_r"))?,
690            span: Range { start: _span.start() as u32, end: _span.end() as u32 },
691        })
692    }
693}
694#[automatically_derived]
695impl FromStr for ForEndNode {
696    type Err = YggdrasilError<DejavuRule>;
697
698    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
699        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::ForEnd)?)
700    }
701}
702#[automatically_derived]
703impl YggdrasilNode for KwForNode {
704    type Rule = DejavuRule;
705
706    fn get_range(&self) -> Option<Range<usize>> {
707        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
708    }
709    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
710        let _span = pair.get_span();
711        Ok(Self { span: Range { start: _span.start() as u32, end: _span.end() as u32 } })
712    }
713}
714#[automatically_derived]
715impl FromStr for KwForNode {
716    type Err = YggdrasilError<DejavuRule>;
717
718    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
719        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::KW_FOR)?)
720    }
721}
722#[automatically_derived]
723impl YggdrasilNode for KwInNode {
724    type Rule = DejavuRule;
725
726    fn get_range(&self) -> Option<Range<usize>> {
727        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
728    }
729    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
730        let _span = pair.get_span();
731        Ok(Self { span: Range { start: _span.start() as u32, end: _span.end() as u32 } })
732    }
733}
734#[automatically_derived]
735impl FromStr for KwInNode {
736    type Err = YggdrasilError<DejavuRule>;
737
738    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
739        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::KW_IN)?)
740    }
741}
742#[automatically_derived]
743impl YggdrasilNode for PatternNode {
744    type Rule = DejavuRule;
745
746    fn get_range(&self) -> Option<Range<usize>> {
747        match self {
748            Self::BarePattern(s) => s.get_range(),
749        }
750    }
751    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
752        let _span = pair.get_span();
753        if let Ok(s) = pair.take_tagged_one::<BarePatternNode>(Cow::Borrowed("bare_pattern")) {
754            return Ok(Self::BarePattern(s));
755        }
756        Err(YggdrasilError::invalid_node(DejavuRule::Pattern, _span))
757    }
758}
759#[automatically_derived]
760impl FromStr for PatternNode {
761    type Err = YggdrasilError<DejavuRule>;
762
763    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
764        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::Pattern)?)
765    }
766}
767#[automatically_derived]
768impl YggdrasilNode for BarePatternNode {
769    type Rule = DejavuRule;
770
771    fn get_range(&self) -> Option<Range<usize>> {
772        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
773    }
774    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
775        let _span = pair.get_span();
776        Ok(Self {
777            identifier: pair.take_tagged_items::<IdentifierNode>(Cow::Borrowed("identifier")).collect::<Result<Vec<_>, _>>()?,
778            span: Range { start: _span.start() as u32, end: _span.end() as u32 },
779        })
780    }
781}
782#[automatically_derived]
783impl FromStr for BarePatternNode {
784    type Err = YggdrasilError<DejavuRule>;
785
786    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
787        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::BarePattern)?)
788    }
789}
790#[automatically_derived]
791impl YggdrasilNode for ExpressionNode {
792    type Rule = DejavuRule;
793
794    fn get_range(&self) -> Option<Range<usize>> {
795        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
796    }
797    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
798        let _span = pair.get_span();
799        Ok(Self {
800            expression_rest: pair
801                .take_tagged_items::<ExpressionRestNode>(Cow::Borrowed("expression_rest"))
802                .collect::<Result<Vec<_>, _>>()?,
803            term: pair.take_tagged_one::<TermNode>(Cow::Borrowed("term"))?,
804            span: Range { start: _span.start() as u32, end: _span.end() as u32 },
805        })
806    }
807}
808#[automatically_derived]
809impl FromStr for ExpressionNode {
810    type Err = YggdrasilError<DejavuRule>;
811
812    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
813        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::Expression)?)
814    }
815}
816#[automatically_derived]
817impl YggdrasilNode for ExpressionRestNode {
818    type Rule = DejavuRule;
819
820    fn get_range(&self) -> Option<Range<usize>> {
821        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
822    }
823    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
824        let _span = pair.get_span();
825        Ok(Self {
826            infix: pair.take_tagged_one::<InfixNode>(Cow::Borrowed("infix"))?,
827            term: pair.take_tagged_one::<TermNode>(Cow::Borrowed("term"))?,
828            span: Range { start: _span.start() as u32, end: _span.end() as u32 },
829        })
830    }
831}
832#[automatically_derived]
833impl FromStr for ExpressionRestNode {
834    type Err = YggdrasilError<DejavuRule>;
835
836    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
837        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::ExpressionRest)?)
838    }
839}
840#[automatically_derived]
841impl YggdrasilNode for InfixNode {
842    type Rule = DejavuRule;
843
844    fn get_range(&self) -> Option<Range<usize>> {
845        match self {
846            Self::Add => None,
847            Self::Mul => None,
848        }
849    }
850    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
851        let _span = pair.get_span();
852        if let Some(_) = pair.find_first_tag("add") {
853            return Ok(Self::Add);
854        }
855        if let Some(_) = pair.find_first_tag("mul") {
856            return Ok(Self::Mul);
857        }
858        Err(YggdrasilError::invalid_node(DejavuRule::Infix, _span))
859    }
860}
861#[automatically_derived]
862impl FromStr for InfixNode {
863    type Err = YggdrasilError<DejavuRule>;
864
865    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
866        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::Infix)?)
867    }
868}
869#[automatically_derived]
870impl YggdrasilNode for TermNode {
871    type Rule = DejavuRule;
872
873    fn get_range(&self) -> Option<Range<usize>> {
874        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
875    }
876    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
877        let _span = pair.get_span();
878        Ok(Self {
879            atomic: pair.take_tagged_one::<AtomicNode>(Cow::Borrowed("atomic"))?,
880            prefix: pair.take_tagged_items::<PrefixNode>(Cow::Borrowed("prefix")).collect::<Result<Vec<_>, _>>()?,
881            suffix: pair.take_tagged_items::<SuffixNode>(Cow::Borrowed("suffix")).collect::<Result<Vec<_>, _>>()?,
882            span: Range { start: _span.start() as u32, end: _span.end() as u32 },
883        })
884    }
885}
886#[automatically_derived]
887impl FromStr for TermNode {
888    type Err = YggdrasilError<DejavuRule>;
889
890    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
891        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::Term)?)
892    }
893}
894#[automatically_derived]
895impl YggdrasilNode for PrefixNode {
896    type Rule = DejavuRule;
897
898    fn get_range(&self) -> Option<Range<usize>> {
899        match self {
900            Self::Not => None,
901        }
902    }
903    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
904        let _span = pair.get_span();
905        if let Some(_) = pair.find_first_tag("not") {
906            return Ok(Self::Not);
907        }
908        Err(YggdrasilError::invalid_node(DejavuRule::Prefix, _span))
909    }
910}
911#[automatically_derived]
912impl FromStr for PrefixNode {
913    type Err = YggdrasilError<DejavuRule>;
914
915    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
916        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::Prefix)?)
917    }
918}
919#[automatically_derived]
920impl YggdrasilNode for SuffixNode {
921    type Rule = DejavuRule;
922
923    fn get_range(&self) -> Option<Range<usize>> {
924        match self {
925            Self::DotCall(s) => s.get_range(),
926            Self::Null => None,
927        }
928    }
929    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
930        let _span = pair.get_span();
931        if let Ok(s) = pair.take_tagged_one::<IdentifierNode>(Cow::Borrowed("dot_call")) {
932            return Ok(Self::DotCall(s));
933        }
934        if let Some(_) = pair.find_first_tag("null") {
935            return Ok(Self::Null);
936        }
937        Err(YggdrasilError::invalid_node(DejavuRule::Suffix, _span))
938    }
939}
940#[automatically_derived]
941impl FromStr for SuffixNode {
942    type Err = YggdrasilError<DejavuRule>;
943
944    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
945        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::Suffix)?)
946    }
947}
948#[automatically_derived]
949impl YggdrasilNode for AtomicNode {
950    type Rule = DejavuRule;
951
952    fn get_range(&self) -> Option<Range<usize>> {
953        match self {
954            Self::Boolean(s) => s.get_range(),
955            Self::Identifier(s) => s.get_range(),
956            Self::Number(s) => s.get_range(),
957        }
958    }
959    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
960        let _span = pair.get_span();
961        if let Ok(s) = pair.take_tagged_one::<BooleanNode>(Cow::Borrowed("boolean")) {
962            return Ok(Self::Boolean(s));
963        }
964        if let Ok(s) = pair.take_tagged_one::<IdentifierNode>(Cow::Borrowed("identifier")) {
965            return Ok(Self::Identifier(s));
966        }
967        if let Ok(s) = pair.take_tagged_one::<NumberNode>(Cow::Borrowed("number")) {
968            return Ok(Self::Number(s));
969        }
970        Err(YggdrasilError::invalid_node(DejavuRule::Atomic, _span))
971    }
972}
973#[automatically_derived]
974impl FromStr for AtomicNode {
975    type Err = YggdrasilError<DejavuRule>;
976
977    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
978        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::Atomic)?)
979    }
980}
981#[automatically_derived]
982impl YggdrasilNode for StringNode {
983    type Rule = DejavuRule;
984
985    fn get_range(&self) -> Option<Range<usize>> {
986        match self {
987            Self::DoubleQuote => None,
988            Self::SingleQuote => None,
989        }
990    }
991    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
992        let _span = pair.get_span();
993        if let Some(_) = pair.find_first_tag("double_quote") {
994            return Ok(Self::DoubleQuote);
995        }
996        if let Some(_) = pair.find_first_tag("single_quote") {
997            return Ok(Self::SingleQuote);
998        }
999        Err(YggdrasilError::invalid_node(DejavuRule::String, _span))
1000    }
1001}
1002#[automatically_derived]
1003impl FromStr for StringNode {
1004    type Err = YggdrasilError<DejavuRule>;
1005
1006    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
1007        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::String)?)
1008    }
1009}
1010#[automatically_derived]
1011impl YggdrasilNode for NumberNode {
1012    type Rule = DejavuRule;
1013
1014    fn get_range(&self) -> Option<Range<usize>> {
1015        match self {
1016            Self::Bin(s) => s.get_range(),
1017            Self::Dec(s) => s.get_range(),
1018            Self::Hex(s) => s.get_range(),
1019            Self::Oct(s) => s.get_range(),
1020        }
1021    }
1022    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
1023        let _span = pair.get_span();
1024        if let Ok(s) = pair.take_tagged_one::<BinNode>(Cow::Borrowed("bin")) {
1025            return Ok(Self::Bin(s));
1026        }
1027        if let Ok(s) = pair.take_tagged_one::<DigitsNode>(Cow::Borrowed("dec")) {
1028            return Ok(Self::Dec(s));
1029        }
1030        if let Ok(s) = pair.take_tagged_one::<HexNode>(Cow::Borrowed("hex")) {
1031            return Ok(Self::Hex(s));
1032        }
1033        if let Ok(s) = pair.take_tagged_one::<OctNode>(Cow::Borrowed("oct")) {
1034            return Ok(Self::Oct(s));
1035        }
1036        Err(YggdrasilError::invalid_node(DejavuRule::Number, _span))
1037    }
1038}
1039#[automatically_derived]
1040impl FromStr for NumberNode {
1041    type Err = YggdrasilError<DejavuRule>;
1042
1043    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
1044        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::Number)?)
1045    }
1046}
1047#[automatically_derived]
1048impl YggdrasilNode for DigitsNode {
1049    type Rule = DejavuRule;
1050
1051    fn get_range(&self) -> Option<Range<usize>> {
1052        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
1053    }
1054    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
1055        let _span = pair.get_span();
1056        Ok(Self { text: pair.get_string(), span: Range { start: _span.start() as u32, end: _span.end() as u32 } })
1057    }
1058}
1059#[automatically_derived]
1060impl FromStr for DigitsNode {
1061    type Err = YggdrasilError<DejavuRule>;
1062
1063    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
1064        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::Digits)?)
1065    }
1066}
1067#[automatically_derived]
1068impl YggdrasilNode for UnitNode {
1069    type Rule = DejavuRule;
1070
1071    fn get_range(&self) -> Option<Range<usize>> {
1072        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
1073    }
1074    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
1075        let _span = pair.get_span();
1076        Ok(Self {
1077            identifier: pair.take_tagged_one::<IdentifierNode>(Cow::Borrowed("identifier"))?,
1078            span: Range { start: _span.start() as u32, end: _span.end() as u32 },
1079        })
1080    }
1081}
1082#[automatically_derived]
1083impl FromStr for UnitNode {
1084    type Err = YggdrasilError<DejavuRule>;
1085
1086    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
1087        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::Unit)?)
1088    }
1089}
1090#[automatically_derived]
1091impl YggdrasilNode for BinNode {
1092    type Rule = DejavuRule;
1093
1094    fn get_range(&self) -> Option<Range<usize>> {
1095        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
1096    }
1097    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
1098        let _span = pair.get_span();
1099        Ok(Self { span: Range { start: _span.start() as u32, end: _span.end() as u32 } })
1100    }
1101}
1102#[automatically_derived]
1103impl FromStr for BinNode {
1104    type Err = YggdrasilError<DejavuRule>;
1105
1106    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
1107        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::BIN)?)
1108    }
1109}
1110#[automatically_derived]
1111impl YggdrasilNode for OctNode {
1112    type Rule = DejavuRule;
1113
1114    fn get_range(&self) -> Option<Range<usize>> {
1115        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
1116    }
1117    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
1118        let _span = pair.get_span();
1119        Ok(Self { span: Range { start: _span.start() as u32, end: _span.end() as u32 } })
1120    }
1121}
1122#[automatically_derived]
1123impl FromStr for OctNode {
1124    type Err = YggdrasilError<DejavuRule>;
1125
1126    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
1127        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::OCT)?)
1128    }
1129}
1130#[automatically_derived]
1131impl YggdrasilNode for HexNode {
1132    type Rule = DejavuRule;
1133
1134    fn get_range(&self) -> Option<Range<usize>> {
1135        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
1136    }
1137    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
1138        let _span = pair.get_span();
1139        Ok(Self { span: Range { start: _span.start() as u32, end: _span.end() as u32 } })
1140    }
1141}
1142#[automatically_derived]
1143impl FromStr for HexNode {
1144    type Err = YggdrasilError<DejavuRule>;
1145
1146    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
1147        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::HEX)?)
1148    }
1149}
1150#[automatically_derived]
1151impl YggdrasilNode for NamepathFreeNode {
1152    type Rule = DejavuRule;
1153
1154    fn get_range(&self) -> Option<Range<usize>> {
1155        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
1156    }
1157    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
1158        let _span = pair.get_span();
1159        Ok(Self {
1160            identifier: pair.take_tagged_items::<IdentifierNode>(Cow::Borrowed("identifier")).collect::<Result<Vec<_>, _>>()?,
1161            span: Range { start: _span.start() as u32, end: _span.end() as u32 },
1162        })
1163    }
1164}
1165#[automatically_derived]
1166impl FromStr for NamepathFreeNode {
1167    type Err = YggdrasilError<DejavuRule>;
1168
1169    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
1170        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::NamepathFree)?)
1171    }
1172}
1173#[automatically_derived]
1174impl YggdrasilNode for NamepathNode {
1175    type Rule = DejavuRule;
1176
1177    fn get_range(&self) -> Option<Range<usize>> {
1178        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
1179    }
1180    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
1181        let _span = pair.get_span();
1182        Ok(Self {
1183            identifier: pair.take_tagged_items::<IdentifierNode>(Cow::Borrowed("identifier")).collect::<Result<Vec<_>, _>>()?,
1184            span: Range { start: _span.start() as u32, end: _span.end() as u32 },
1185        })
1186    }
1187}
1188#[automatically_derived]
1189impl FromStr for NamepathNode {
1190    type Err = YggdrasilError<DejavuRule>;
1191
1192    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
1193        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::Namepath)?)
1194    }
1195}
1196#[automatically_derived]
1197impl YggdrasilNode for IdentifierNode {
1198    type Rule = DejavuRule;
1199
1200    fn get_range(&self) -> Option<Range<usize>> {
1201        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
1202    }
1203    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
1204        let _span = pair.get_span();
1205        Ok(Self { span: Range { start: _span.start() as u32, end: _span.end() as u32 } })
1206    }
1207}
1208#[automatically_derived]
1209impl FromStr for IdentifierNode {
1210    type Err = YggdrasilError<DejavuRule>;
1211
1212    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
1213        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::Identifier)?)
1214    }
1215}
1216#[automatically_derived]
1217impl YggdrasilNode for BooleanNode {
1218    type Rule = DejavuRule;
1219
1220    fn get_range(&self) -> Option<Range<usize>> {
1221        match self {
1222            Self::False => None,
1223            Self::True => None,
1224        }
1225    }
1226    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
1227        let _span = pair.get_span();
1228        if let Some(_) = pair.find_first_tag("false") {
1229            return Ok(Self::False);
1230        }
1231        if let Some(_) = pair.find_first_tag("true") {
1232            return Ok(Self::True);
1233        }
1234        Err(YggdrasilError::invalid_node(DejavuRule::Boolean, _span))
1235    }
1236}
1237#[automatically_derived]
1238impl FromStr for BooleanNode {
1239    type Err = YggdrasilError<DejavuRule>;
1240
1241    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
1242        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::Boolean)?)
1243    }
1244}
1245#[automatically_derived]
1246impl YggdrasilNode for WhiteSpaceNode {
1247    type Rule = DejavuRule;
1248
1249    fn get_range(&self) -> Option<Range<usize>> {
1250        Some(Range { start: self.span.start as usize, end: self.span.end as usize })
1251    }
1252    fn from_pair(pair: TokenPair<Self::Rule>) -> Result<Self, YggdrasilError<Self::Rule>> {
1253        let _span = pair.get_span();
1254        Ok(Self { span: Range { start: _span.start() as u32, end: _span.end() as u32 } })
1255    }
1256}
1257#[automatically_derived]
1258impl FromStr for WhiteSpaceNode {
1259    type Err = YggdrasilError<DejavuRule>;
1260
1261    fn from_str(input: &str) -> Result<Self, YggdrasilError<DejavuRule>> {
1262        Self::from_cst(DejavuParser::parse_cst(input, DejavuRule::WhiteSpace)?)
1263    }
1264}