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};
|
2025-02-03 03:07:40 +09:00
|
|
|
use itertools::Itertools;
|
2025-01-29 18:50:32 +09:00
|
|
|
|
2025-01-31 00:36:19 +09:00
|
|
|
fn main() -> Result<()> {
|
|
|
|
env_logger::init();
|
|
|
|
|
2025-01-29 01:55:23 +09:00
|
|
|
println!("Hello, world!");
|
2025-01-31 00:36:19 +09:00
|
|
|
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,
|
|
|
|
},
|
2025-01-31 00:36:19 +09:00
|
|
|
)?;
|
|
|
|
// println!("Parsed: {:#?}", doc);
|
|
|
|
// println!("Root: {:?}", doc.root_element());
|
|
|
|
|
|
|
|
let register_map = types::Module::from_xml_dom(doc.root_element())?;
|
|
|
|
println!("read: {:#?}", register_map);
|
2025-01-29 21:20:24 +09:00
|
|
|
|
2025-02-03 03:07:40 +09:00
|
|
|
println!("===========================================");
|
|
|
|
|
|
|
|
let files = register_map.generate_register_interface(None, None, HashMap::new())?;
|
2025-02-03 04:39:01 +09:00
|
|
|
// println!("{:#?}", files);
|
2025-02-03 03:07:40 +09:00
|
|
|
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
|
|
|
|
2025-01-31 00:36:19 +09:00
|
|
|
Ok(())
|
2025-01-29 01:55:23 +09:00
|
|
|
}
|