chipi_core/backend/
rust.rs1use crate::codegen;
7use crate::config::GenTarget;
8use crate::tree;
9use crate::types::ValidatedDef;
10
11use super::{CodegenBackend, CodegenError};
12
13pub struct RustBackend;
15
16impl CodegenBackend for RustBackend {
17 fn lang(&self) -> &str {
18 "rust"
19 }
20
21 fn validate_lang_options(&self, options: &toml::Value) -> Result<(), Vec<String>> {
22 if let toml::Value::Table(table) = options {
23 if !table.is_empty() {
24 let keys: Vec<String> = table
25 .keys()
26 .map(|k| format!("unknown lang_option: {}", k))
27 .collect();
28 return Err(keys);
29 }
30 }
31 Ok(())
32 }
33
34 fn generate(&self, ir: &ValidatedDef, config: &GenTarget) -> Result<String, CodegenError> {
35 let tree = tree::build_tree(ir);
36 let code = codegen::generate_code(ir, &tree, &config.type_map, &config.dispatch_overrides);
37 Ok(code)
38 }
39
40 fn formatter_command(&self) -> Option<&[&str]> {
41 Some(&["rustfmt"])
42 }
43}