use leo_span::Span;
pub type NodeID = usize;
pub trait Node:
std::fmt::Debug + std::fmt::Display + Clone + PartialEq + Eq + serde::Serialize + serde::de::DeserializeOwned
{
fn span(&self) -> Span;
fn set_span(&mut self, span: Span);
fn id(&self) -> NodeID;
fn set_id(&mut self, id: NodeID);
}
#[macro_export]
macro_rules! simple_node_impl {
($ty:ty) => {
impl Node for $ty {
fn span(&self) -> Span {
self.span
}
fn set_span(&mut self, span: Span) {
self.span = span;
}
fn id(&self) -> NodeID {
self.id
}
fn set_id(&mut self, id: NodeID) {
self.id = id;
}
}
};
}