bindgen: snap

This commit is contained in:
nym21
2026-03-16 09:19:55 +01:00
parent 46d85d397d
commit c5a270aabc
5 changed files with 123 additions and 148 deletions

View File

@@ -7,7 +7,7 @@ use brk_types::TreeNode;
use crate::{
ClientMetadata, Endpoint, GenericSyntax, JavaScriptSyntax, PatternField, build_child_path,
generate_leaf_field, prepare_tree_node, to_camel_case,
generate_leaf_field, generate_tree_node_field, prepare_tree_node, to_camel_case,
};
use super::api::generate_api_methods;
@@ -220,29 +220,16 @@ fn generate_tree_initializer(
);
writeln!(output, "{}}},", indent_str).unwrap();
} else {
// Use pattern factory
let pattern = metadata.find_pattern(&child.field.rust_type);
if let Some(pat) = pattern
&& pat.is_templated()
{
// Templated: extract discriminator using the pattern's templates
let disc = pat
.extract_disc_from_instance(&child.base_result.field_parts)
.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();
}
generate_tree_node_field(
output,
&syntax,
&child.field,
metadata,
&indent_str,
child.name,
"this",
Some(&child.base_result),
);
}
}
}

View File

@@ -6,8 +6,8 @@ use std::fmt::Write;
use brk_types::TreeNode;
use crate::{
ClientMetadata, GenericSyntax, PatternField, PythonSyntax, build_child_path,
escape_python_keyword, generate_leaf_field, prepare_tree_node, to_snake_case,
ClientMetadata, LanguageSyntax, PatternField, PythonSyntax, build_child_path,
generate_leaf_field, generate_tree_node_field, prepare_tree_node,
};
/// Generate tree classes
@@ -70,8 +70,6 @@ fn generate_tree_class(
let syntax = PythonSyntax;
for child in &ctx.children {
let field_name_py = escape_python_keyword(&to_snake_case(child.name));
if child.is_leaf {
if let TreeNode::Leaf(leaf) = child.node {
generate_leaf_field(
@@ -79,43 +77,24 @@ fn generate_tree_class(
);
}
} else if child.should_inline {
// Inline class
let field_name = syntax.field_name(child.name);
writeln!(
output,
" self.{}: {} = {}(client)",
field_name_py, child.inline_type_name, child.inline_type_name
field_name, child.inline_type_name, child.inline_type_name
)
.unwrap();
} else {
// Use pattern class with metric base
let py_type = metadata.resolve_tree_field_type(
generate_tree_node_field(
output,
&syntax,
&child.field,
child.child_fields.as_deref(),
name,
metadata,
" ",
child.name,
GenericSyntax::PYTHON,
"client",
Some(&child.base_result),
);
let pattern = metadata.find_pattern(&child.field.rust_type);
if let Some(pat) = pattern
&& pat.is_templated()
{
let disc = pat
.extract_disc_from_instance(&child.base_result.field_parts)
.unwrap_or_default();
writeln!(
output,
" self.{}: {} = {}(client, '{}', '{}')",
field_name_py, py_type, child.field.rust_type, child.base_result.base, disc
)
.unwrap();
} else {
writeln!(
output,
" self.{}: {} = {}(client, '{}')",
field_name_py, py_type, child.field.rust_type, child.base_result.base
)
.unwrap();
}
}
}

View File

@@ -97,34 +97,16 @@ fn generate_tree_node(
)
.unwrap();
} else {
// Pattern type - use ::new() constructor
let pattern = metadata.find_pattern(&child.field.rust_type);
if let Some(pat) = pattern
&& pat.is_templated()
{
let disc = pat
.extract_disc_from_instance(&child.base_result.field_parts)
.unwrap_or_default();
writeln!(
output,
" {}: {}::new(client.clone(), {}, {}.to_string()),",
field_name,
child.field.rust_type,
syntax.string_literal(&child.base_result.base),
syntax.string_literal(&disc),
)
.unwrap();
} else {
generate_tree_node_field(
output,
&syntax,
&child.field,
metadata,
" ",
child.name,
Some(&child.base_result.base),
);
}
generate_tree_node_field(
output,
&syntax,
&child.field,
metadata,
" ",
child.name,
"client.clone()",
Some(&child.base_result),
);
}
}