mirror of
https://gitlab.cern.ch/wotsubo/endcap-sl-software-ri-generator.git
synced 2025-02-23 17:17:08 +09:00
56 lines
1.6 KiB
Rust
56 lines
1.6 KiB
Rust
use std::fs::DirBuilder;
|
|
use std::io::Write;
|
|
use std::{collections::HashMap, fs, io::BufWriter};
|
|
|
|
use anyhow::{anyhow, Context, Result};
|
|
use endcap_sl_software_ri_generator::{generator::CodeGen, types};
|
|
use itertools::Itertools;
|
|
|
|
fn main() -> Result<()> {
|
|
env_logger::init();
|
|
|
|
println!("Hello, world!");
|
|
let xmlfile = fs::read_to_string("./csr.xml")?;
|
|
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())?;
|
|
// println!("{:#?}", files);
|
|
for filepath in files.keys().sorted() {
|
|
println!("{}", filepath.display());
|
|
}
|
|
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)?;
|
|
}
|
|
|
|
Ok(())
|
|
}
|