Refactor production build fn.

This commit is contained in:
Jesse Brault 2025-09-23 10:19:28 -05:00
parent f3ebcd77bd
commit de021789c1
2 changed files with 7 additions and 15 deletions

View File

@ -1,19 +1,18 @@
use crate::spec::{ProductionBuildSpec, ProductionKind, ProductionStringFrom}; use crate::deserialize::util::{make_build_fn_name, make_build_pair};
use crate::util::{make_build_fn_name, make_build_pair}; use crate::spec::production_spec::{ProductionBuildSpec, ProductionKind, ProductionStringFrom};
use proc_macro2::TokenStream; use proc_macro2::TokenStream;
use quote::{format_ident, quote}; use quote::{format_ident, quote};
pub fn make_production_build_fn(production_build_spec: &ProductionBuildSpec) -> TokenStream { pub fn make_production_build_fn(production_build_spec: &ProductionBuildSpec) -> TokenStream {
let build_fn_ident = format_ident!("{}", make_build_fn_name(production_build_spec.rule())); let build_fn_ident = format_ident!("{}", make_build_fn_name(production_build_spec.name()));
let return_type_ident = match production_build_spec.kind() { let return_type_ident = match production_build_spec.kind() {
ProductionKind::Int => format_ident!("i32"), ProductionKind::Int => format_ident!("i32"),
ProductionKind::Long => format_ident!("i64"), ProductionKind::Long => format_ident!("i64"),
ProductionKind::Double => format_ident!("f64"), ProductionKind::Double => format_ident!("f64"),
ProductionKind::String(_) => format_ident!("String"), ProductionKind::String(_) => format_ident!("String"),
ProductionKind::Boolean => format_ident!("bool"), ProductionKind::Boolean(_) => format_ident!("bool"),
ProductionKind::Node(node_type) => format_ident!("{}", node_type.kind()),
}; };
let pair_ident = format_ident!("{}", make_build_pair(production_build_spec.rule())); let pair_ident = format_ident!("{}", make_build_pair(production_build_spec.name()));
let pair_mapper = match production_build_spec.kind() { let pair_mapper = match production_build_spec.kind() {
ProductionKind::Int => quote! { ProductionKind::Int => quote! {
@ -75,16 +74,9 @@ pub fn make_production_build_fn(production_build_spec: &ProductionBuildSpec) ->
} }
} }
}, },
ProductionKind::Boolean => quote! { ProductionKind::Boolean(_) => quote! {
#pair_ident.as_str().parse::<bool>().unwrap() #pair_ident.as_str().parse::<bool>().unwrap()
}, },
ProductionKind::Node(node_kind) => {
let build_fn_ident = format_ident!("{}", make_build_fn_name(node_kind.with()));
quote! {
let inner_pair = #pair_ident.into_inner().next().unwrap();
#build_fn_ident(inner_pair)
}
}
}; };
quote! { quote! {

View File

@ -11,7 +11,7 @@ impl ProductionBuildSpec {
} }
} }
pub fn rule(&self) -> &str { pub fn name(&self) -> &str {
&self.name &self.name
} }