use crate::spec::BuildSpec; use leaf_enum_build_fn::make_leaf_enum_build_fn; use leaf_struct_build_fn::make_leaf_struct_build_fn; use node_production_build_fn::make_node_production_build_fn; use polymorphic_enum_inner_build_build_fn::make_polymorphic_enum_inner_build_build_fn; use polymorphic_enum_loop_build_fn::make_polymorphic_enum_loop_build_fn; use polymorphic_leaf_enum_build_fn::make_polymorphic_leaf_enum_build_fn; use polymorphic_pass_through_build_fn::make_polymorphic_pass_through_build_fn; use polymorphic_tree_enum_build_fn::make_polymorphic_tree_enum_build_fn; use polymorphic_type_build_fn::make_polymorphic_type_build_fn; use proc_macro2::TokenStream; use production_build_fn::make_production_build_fn; use struct_build_fn::make_struct_build_fn; use tree_enum_build_fn::make_enum_build_fn; mod leaf_enum_build_fn; mod leaf_struct_build_fn; mod node_production_build_fn; mod polymorphic_enum_inner_build_build_fn; mod polymorphic_enum_loop_build_fn; mod polymorphic_leaf_enum_build_fn; mod polymorphic_pass_through_build_fn; mod polymorphic_tree_enum_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) } BuildSpec::PolymorphicPassThrough(polymorphic_pass_through_spec) => { make_polymorphic_pass_through_build_fn(polymorphic_pass_through_spec) } BuildSpec::PolymorphicEnumInnerBuild(polymorphic_enum_inner_build_spec) => { make_polymorphic_enum_inner_build_build_fn(polymorphic_enum_inner_build_spec) } BuildSpec::PolymorphicLeafEnum(polymorphic_leaf_enum_spec) => { make_polymorphic_leaf_enum_build_fn(polymorphic_leaf_enum_spec) } BuildSpec::PolymorphicTreeEnum(polymorphic_tree_enum_spec) => { make_polymorphic_tree_enum_build_fn(polymorphic_tree_enum_spec) } } }