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