endcap-sl-software-ri-gener.../src/main.rs

57 lines
1.6 KiB
Rust
Raw Normal View History

2025-02-03 04:39:01 +09:00
use std::fs::DirBuilder;
use std::io::Write;
use std::{collections::HashMap, fs, io::BufWriter};
2025-01-29 17:12:15 +09:00
2025-02-03 04:39:01 +09:00
use anyhow::{anyhow, Context, Result};
2025-01-31 02:17:48 +09:00
use endcap_sl_software_ri_generator::{generator::CodeGen, types};
use itertools::Itertools;
2025-01-29 18:50:32 +09:00
fn main() -> Result<()> {
env_logger::init();
2025-01-29 01:55:23 +09:00
println!("Hello, world!");
let xmlfile = fs::read_to_string("./csr.xml")?;
2025-01-29 17:12:15 +09:00
let doc = roxmltree::Document::parse_with_options(
&xmlfile,
roxmltree::ParsingOptions {
allow_dtd: true,
nodes_limit: u32::MAX,
},
)?;
// println!("Parsed: {:#?}", doc);
// println!("Root: {:?}", doc.root_element());
let register_map = types::Module::from_xml_dom(doc.root_element())?;
println!("read: {:#?}", register_map);
println!("===========================================");
let files = register_map.generate_register_interface(None, None, HashMap::new())?;
2025-02-03 04:39:01 +09:00
// println!("{:#?}", files);
for filepath in files.keys().sorted() {
println!("{}", filepath.display());
}
2025-02-03 04:39:01 +09:00
if !std::fs::read_dir("register_interface")
.context("register_interface not found")?
.collect_vec()
.is_empty()
{
return Err(anyhow!("dir out is not empty"));
};
for (file, code) in files {
DirBuilder::new()
.recursive(true)
.create(file.parent().context("no parent")?)?;
let file = fs::OpenOptions::new()
.create(true)
.truncate(true)
.write(true)
.open(file)
.context("opening file")?;
let mut writer = BufWriter::new(file);
write!(writer, "{}", code)?;
}
2025-01-31 02:17:48 +09:00
Ok(())
2025-01-29 01:55:23 +09:00
}