use crate::build_fn::leaf_enum_build_fn::make_leaf_enum_build_fn; use crate::build_fn::leaf_struct_build_fn::make_leaf_struct_build_fn; use crate::build_fn::node_production_build_fn::make_node_production_build_fn; use crate::build_fn::polymorphic_enum_loop_build_fn::make_polymorphic_enum_loop_build_fn; use crate::build_fn::polymorphic_type_build_fn::make_polymorphic_type_build_fn; use crate::build_fn::production_build_fn::make_production_build_fn; use crate::build_fn::struct_build_fn::make_struct_build_fn; use crate::build_fn::tree_enum_build_fn::make_enum_build_fn; use crate::spec::BuildSpec; use proc_macro2::TokenStream; mod leaf_enum_build_fn; mod leaf_struct_build_fn; mod node_production_build_fn; mod polymorphic_build_build_fn; mod polymorphic_enum_build_fn; mod polymorphic_enum_loop_build_fn; mod polymorphic_type_build_fn; mod production_build_fn; mod struct_build_fn; mod tree_enum_build_fn; pub fn make_build_fn(build_spec: &BuildSpec) -> TokenStream { match build_spec { BuildSpec::Struct(struct_spec) => make_struct_build_fn(struct_spec), BuildSpec::LeafStruct(leaf_struct_spec) => make_leaf_struct_build_fn(leaf_struct_spec), BuildSpec::Enum(enum_spec) => make_enum_build_fn(enum_spec), BuildSpec::LeafEnum(leaf_enum_spec) => make_leaf_enum_build_fn(leaf_enum_spec), BuildSpec::Production(production_spec) => make_production_build_fn(production_spec), BuildSpec::NodeProduction(node_production_spec) => { make_node_production_build_fn(node_production_spec) } BuildSpec::PolymorphicType(polymorphic_type_spec) => { make_polymorphic_type_build_fn(polymorphic_type_spec) } BuildSpec::PolymorphicEnumLoop(polymorphic_enum_loop_spec) => { make_polymorphic_enum_loop_build_fn(polymorphic_enum_loop_spec) } } }