Skip to main content

chipi_core/backend/
rust.rs

1//! Rust code generation backend.
2//!
3//! Generates `.rs` files with instruction enums, decode functions,
4//! display implementations, and sub-decoder dispatch code.
5
6use crate::codegen;
7use crate::config::GenTarget;
8use crate::tree;
9use crate::types::ValidatedDef;
10
11use super::{CodegenBackend, CodegenError};
12
13/// The Rust code generation backend.
14pub struct RustBackend;
15
16impl CodegenBackend for RustBackend {
17    fn lang(&self) -> &str {
18        "rust"
19    }
20
21    fn generate(&self, ir: &ValidatedDef, config: &GenTarget) -> Result<String, CodegenError> {
22        let tree = tree::build_tree(ir);
23        let code = codegen::generate_code(ir, &tree, &config.type_map, &config.dispatch_overrides);
24        Ok(code)
25    }
26
27    fn formatter_command(&self) -> Option<&[&str]> {
28        Some(&["rustfmt"])
29    }
30}