Move around util fn and set up enum build fn mod.

This commit is contained in:
Jesse Brault 2025-09-14 18:24:56 -05:00
parent 0842690e6f
commit 42cc6720d1
7 changed files with 46 additions and 27 deletions

View File

@ -1,10 +1,10 @@
use crate::build_fn_gen::make_build_fn_name;
use crate::spec::{
BooleanBuild, BuildSpec, ChildSpec, EnumBuildSpec, EnumRule, LeafEnumBuildSpec, LeafEnumRule,
LeafEnumRuleBuild, SingleBooleanChildToBuild, SingleChild, SingleChildToBuild,
SingleLiteralChildToBuild, SingleTypeChildToBuild, SkipChild, StructBuildSpec, VecChild,
VecChildToBuild, VecTypeChildToBuild,
};
use crate::util::make_build_fn_name;
use convert_case::{Case, Casing};
use yaml_rust2::{Yaml, YamlLoader};

View File

@ -0,0 +1,6 @@
use proc_macro2::TokenStream;
use crate::spec::EnumBuildSpec;
pub fn make_enum_build_fn(enum_build_spec: &EnumBuildSpec) -> TokenStream {
todo!()
}

View File

@ -1,14 +1,17 @@
pub mod deserialize;
mod build_fn_gen;
mod enum_build_fn;
mod spec;
mod struct_build_fn;
mod type_gen;
mod util;
use crate::build_fn_gen::make_struct_build_fn;
use crate::struct_build_fn::make_struct_build_fn;
use crate::type_gen::make_type;
use proc_macro2::TokenStream;
use quote::quote;
use spec::BuildSpec;
use syn::File;
use crate::enum_build_fn::make_enum_build_fn;
fn debug_built_spec(build_spec: &BuildSpec, token_stream: &TokenStream) {
println!("*** BuildSpec ***");
@ -18,7 +21,7 @@ fn debug_built_spec(build_spec: &BuildSpec, token_stream: &TokenStream) {
}
BuildSpec::LeafEnum(leaf_enum_build_spec) => {
println!("Spec name: {}", leaf_enum_build_spec.name());
},
}
BuildSpec::Struct(struct_build_spec) => {
println!("Spec name: {}", struct_build_spec.name());
}
@ -30,7 +33,7 @@ fn debug_built_spec(build_spec: &BuildSpec, token_stream: &TokenStream) {
pub struct AstGeneratedFile {
pub name: String,
pub contents: String
pub contents: String,
}
fn token_stream_to_string(token_stream: TokenStream) -> String {
@ -39,17 +42,22 @@ fn token_stream_to_string(token_stream: TokenStream) -> String {
}
fn generate_build_file(build_specs: &[BuildSpec]) -> AstGeneratedFile {
let build_fns = build_specs.iter()
.map(|build_spec| {
match build_spec {
BuildSpec::Enum(enum_build_spec) => { quote! {} }
BuildSpec::LeafEnum(leaf_enum_build_spec) => { quote! {} }
let build_fns = build_specs
.iter()
.map(|build_spec| match build_spec {
BuildSpec::Enum(enum_build_spec) => {
let stream = make_enum_build_fn(enum_build_spec);
debug_built_spec(build_spec, &stream);
stream
}
BuildSpec::LeafEnum(leaf_enum_build_spec) => {
todo!()
}
BuildSpec::Struct(struct_build_spec) => {
let struct_build_fn_stream = make_struct_build_fn(struct_build_spec);
debug_built_spec(build_spec, &struct_build_fn_stream);
struct_build_fn_stream
}
}
})
.collect::<Vec<_>>();
let combined = quote! {
@ -57,12 +65,13 @@ fn generate_build_file(build_specs: &[BuildSpec]) -> AstGeneratedFile {
};
AstGeneratedFile {
name: String::from("build.rs"),
contents: token_stream_to_string(combined)
contents: token_stream_to_string(combined),
}
}
fn generate_node_file(build_specs: &[BuildSpec]) -> AstGeneratedFile {
let types = build_specs.iter()
let types = build_specs
.iter()
.map(|build_spec| make_type(build_spec))
.collect::<Vec<_>>();
let combined = quote! {
@ -70,12 +79,15 @@ fn generate_node_file(build_specs: &[BuildSpec]) -> AstGeneratedFile {
};
AstGeneratedFile {
name: String::from("node.rs"),
contents: token_stream_to_string(combined)
contents: token_stream_to_string(combined),
}
}
pub fn generate_files(build_specs: &[BuildSpec]) -> Vec<AstGeneratedFile> {
vec![generate_build_file(build_specs), generate_node_file(build_specs)]
vec![
generate_build_file(build_specs),
generate_node_file(build_specs),
]
}
pub fn test_dump() -> String {

View File

@ -1,4 +1,4 @@
use crate::build_fn_gen::make_build_fn_name;
use crate::util::make_build_fn_name;
use convert_case::{Case, Casing};
pub enum BuildSpec {

View File

@ -6,10 +6,6 @@ use convert_case::{Case, Casing};
use proc_macro2::{Ident, TokenStream};
use quote::{format_ident, quote};
pub fn make_build_fn_name(s: &str) -> String {
format!("build_{}", s.to_case(Case::Snake))
}
fn make_vec_child_holder(vec_child: &VecChild) -> TokenStream {
let (child_ident, child_type_ident) = match vec_child.build() {
VecChildToBuild::Type(vec_type_child) => (
@ -199,7 +195,7 @@ fn make_child_arg(child_spec: &ChildSpec) -> Option<TokenStream> {
SingleChildToBuild::Long(literal_child) => {
let child_ident = get_literal_child_ident(literal_child);
Some(quote! { #child_ident.unwrap() })
},
}
SingleChildToBuild::Double(literal_child) => {
let child_ident = get_literal_child_ident(literal_child);
Some(quote! { #child_ident.unwrap() })

View File

@ -164,7 +164,7 @@ fn make_struct_type(build_spec: &StructBuildSpec) -> TokenStream {
pub fn make_type(build_spec: &BuildSpec) -> TokenStream {
match build_spec {
BuildSpec::Enum(enum_build_spec) => make_enum_type(enum_build_spec),
BuildSpec::LeafEnum(leaf_enum_build_spec) => quote! {},
BuildSpec::LeafEnum(leaf_enum_build_spec) => todo!(),
BuildSpec::Struct(struct_build_spec) => make_struct_type(struct_build_spec),
}
}

View File

@ -0,0 +1,5 @@
use convert_case::{Case, Casing};
pub fn make_build_fn_name(s: &str) -> String {
format!("build_{}", s.to_case(Case::Snake))
}