25 lines
790 B
Rust
25 lines
790 B
Rust
use crate::spec::leaf_struct_spec::LeafStructBuildSpec;
|
|
use proc_macro2::TokenStream;
|
|
use quote::{format_ident, quote};
|
|
|
|
pub fn make_leaf_struct_ast_node_impl(spec: &LeafStructBuildSpec) -> TokenStream {
|
|
let type_ident = format_ident!("{}", spec.build());
|
|
quote! {
|
|
impl<'a> AstNode<'a> for #type_ident {
|
|
fn children(&'a self) -> Vec<&'a dyn AstNode<'a>> {
|
|
vec![]
|
|
}
|
|
|
|
fn for_each_child_mut(&'a mut self, mut f: &mut dyn FnMut(&'a mut dyn AstNode<'a>)) {}
|
|
|
|
fn as_node_ref(&'a self) -> AstNodeRef<'a> {
|
|
AstNodeRef::#type_ident(&self)
|
|
}
|
|
|
|
fn as_node_ref_mut(&'a mut self) -> AstNodeRefMut<'a> {
|
|
AstNodeRefMut::#type_ident(self)
|
|
}
|
|
}
|
|
}
|
|
}
|