brk_bindgen/backends/
rust.rs1use crate::{GenericSyntax, LanguageSyntax, to_snake_case};
4
5pub struct RustSyntax;
7
8impl LanguageSyntax for RustSyntax {
9 fn field_name(&self, name: &str) -> String {
10 to_snake_case(name)
11 }
12
13 fn path_expr(&self, base_var: &str, suffix: &str) -> String {
14 format!("format!(\"{{{}}}{}\")", base_var, suffix)
15 }
16
17 fn suffix_expr(&self, acc_var: &str, relative: &str) -> String {
18 if relative.is_empty() {
19 format!("{}.clone()", acc_var)
21 } else {
22 format!("_m(&{}, \"{}\")", acc_var, relative)
24 }
25 }
26
27 fn prefix_expr(&self, prefix: &str, acc_var: &str) -> String {
28 if prefix.is_empty() {
29 format!("{}.clone()", acc_var)
31 } else {
32 let prefix_base = prefix.trim_end_matches('_');
34 format!("_p(\"{}\", &{})", prefix_base, acc_var)
35 }
36 }
37
38 fn constructor(&self, type_name: &str, path_expr: &str) -> String {
39 format!("{}::new(client.clone(), {})", type_name, path_expr)
40 }
41
42 fn field_init(&self, indent: &str, name: &str, _type_ann: &str, value: &str) -> String {
43 format!("{}{}: {},", indent, name, value)
45 }
46
47 fn generic_syntax(&self) -> GenericSyntax {
48 GenericSyntax::RUST
49 }
50
51 fn string_literal(&self, value: &str) -> String {
52 format!("\"{}\".to_string()", value)
53 }
54
55 fn constructor_name(&self, type_name: &str) -> String {
56 format!("{}::new", type_name)
57 }
58}