teo_parser/traits/
node_trait.rs1use std::collections::BTreeMap;
2use std::fmt::Display;
3use crate::ast::node::Node;
4use crate::ast::span::Span;
5use crate::traits::identifiable::Identifiable;
6use crate::traits::write::Write;
7
8pub trait NodeTrait: Identifiable + Write + Display {
9
10 fn span(&self) -> Span;
11
12 fn children(&self) -> Option<&BTreeMap<usize, Node>>;
13
14 fn has_children(&self) -> bool {
15 self.children().map_or(false, |c| c.is_empty())
16 }
17
18 fn child(&self, id: usize) -> Option<&Node> {
19 self.children().map(|c| c.get(&id)).flatten()
20 }
21}