bindgen: snapshot

This commit is contained in:
nym21
2026-03-15 21:26:05 +01:00
parent 6e5b2c0e63
commit fdf8661a4b
23 changed files with 1151 additions and 810 deletions
@@ -701,7 +701,7 @@ pub fn generate_structural_patterns(
}
writeln!(output, " */\n").unwrap();
// Generate factory function for ALL patterns
writeln!(output, "/**").unwrap();
writeln!(output, " * Create a {} pattern node", pattern.name).unwrap();
if pattern.is_generic {
@@ -709,6 +709,9 @@ pub fn generate_structural_patterns(
}
writeln!(output, " * @param {{BrkClientBase}} client").unwrap();
writeln!(output, " * @param {{string}} acc - Accumulated metric name").unwrap();
if pattern.is_templated() {
writeln!(output, " * @param {{string}} disc - Discriminator suffix").unwrap();
}
let return_type = if pattern.is_generic {
format!("{}<T>", pattern.name)
} else {
@@ -717,7 +720,11 @@ pub fn generate_structural_patterns(
writeln!(output, " * @returns {{{}}}", return_type).unwrap();
writeln!(output, " */").unwrap();
writeln!(output, "function create{}(client, acc) {{", pattern.name).unwrap();
if pattern.is_templated() {
writeln!(output, "function create{}(client, acc, disc) {{", pattern.name).unwrap();
} else {
writeln!(output, "function create{}(client, acc) {{", pattern.name).unwrap();
}
writeln!(output, " return {{").unwrap();
let syntax = JavaScriptSyntax;
@@ -221,12 +221,31 @@ fn generate_tree_initializer(
writeln!(output, "{}}},", indent_str).unwrap();
} else {
// Use pattern factory
writeln!(
output,
"{}{}: create{}(this, '{}'),",
indent_str, field_name, child.field.rust_type, child.base_result.base
)
.unwrap();
let pattern = metadata.find_pattern(&child.field.rust_type);
if pattern.is_some_and(|p| p.is_templated()) {
// Templated: extract discriminator from field_parts
let disc = child
.base_result
.field_parts
.values()
.filter(|v| !v.is_empty())
.min_by_key(|v| v.len())
.cloned()
.unwrap_or_default();
writeln!(
output,
"{}{}: create{}(this, '{}', '{}'),",
indent_str, field_name, child.field.rust_type, child.base_result.base, disc
)
.unwrap();
} else {
writeln!(
output,
"{}{}: create{}(this, '{}'),",
indent_str, field_name, child.field.rust_type, child.base_result.base
)
.unwrap();
}
}
}
}