teo_parser/traits/
node_trait.rs

1use 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}