Skip to main content

dbc_codegen2/
app.rs

1use can_dbc::Dbc as ParsedDbc;
2use std::fs;
3
4use crate::codegen;
5use crate::middle_end::nodes::InferSignalTypes;
6use crate::utils::Language;
7use crate::{
8    ir::IRBuilder,
9    middle_end::{
10        nodes::SanitizeSignalEnumVariantNames,
11        pipeline::transform_pipeline::TransformationPipeline,
12    },
13};
14
15pub struct App;
16
17impl App {
18    pub fn convert(input_path: &str, language: Language) -> String {
19        let data = fs::read_to_string(input_path).expect("Unable to read input file");
20        let mut dbc = IRBuilder::to_ir(ParsedDbc::try_from(data.as_str()).unwrap());
21
22        //TODO: give user options to add new nodes/remove nodes
23        TransformationPipeline::new()
24            .add(SanitizeSignalEnumVariantNames)
25            .add(InferSignalTypes)
26            .run(&mut dbc);
27
28        match language {
29            Language::Rust => codegen::rust::RustGen::generate(&dbc),
30            Language::Cpp  => codegen::cpp::CppGen::generate(&dbc),
31        }
32    }
33}