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 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}