diff --git a/ast-generator/src/build_fn/mod.rs b/ast-generator/src/build_fn/mod.rs index 50fc834..2566732 100644 --- a/ast-generator/src/build_fn/mod.rs +++ b/ast-generator/src/build_fn/mod.rs @@ -1,8 +1,9 @@ -pub mod enum_build_fn; pub mod leaf_enum_build_fn; pub mod leaf_struct_build_fn; +mod node_production_build_fn; pub mod polymorphic_build_build_fn; pub mod polymorphic_build_fn; pub mod polymorphic_enum_build_fn; pub mod production_build_fn; pub mod struct_build_fn; +pub mod tree_enum_build_fn; diff --git a/ast-generator/src/build_fn/node_production_build_fn.rs b/ast-generator/src/build_fn/node_production_build_fn.rs new file mode 100644 index 0000000..85b027f --- /dev/null +++ b/ast-generator/src/build_fn/node_production_build_fn.rs @@ -0,0 +1,18 @@ +use crate::deserialize::util::make_build_pair; +use crate::spec::node_production_spec::NodeProductionBuildSpec; +use proc_macro2::TokenStream; +use quote::{format_ident, quote}; + +pub fn make_node_production_build_fn(spec: &NodeProductionBuildSpec) -> TokenStream { + let build_fn_ident = format_ident!("{}", spec.with()); + let pair_ident = format_ident!("{}", make_build_pair(spec.name())); + let return_type_ident = format_ident!("{}", spec.kind()); + let inner_build_fn_ident = format_ident!("{}", spec.with()); + + quote! { + fn #build_fn_ident(#pair_ident: Pair) -> #return_type_ident { + let inner_pair = #pair_ident.into_inner().next().unwrap(); + #inner_build_fn_ident(inner_pair) + } + } +} \ No newline at end of file