use serde_json::Value;
use std::fs;
use std::io::Write;
use std::process::Command;
mod extract;
pub use extract::{extract_ports, Port, PortDir};
pub fn run_slang(
verilog: &str,
ignore_unknown_modules: bool,
) -> Result<Value, Box<dyn std::error::Error>> {
let mut tmp_sv = tempfile::NamedTempFile::new()?;
tmp_sv.write_all(verilog.as_bytes())?;
let slang_path = env!("SLANG_PATH");
let tmp_json = tempfile::NamedTempFile::new()?;
let mut args = vec!["--ast-json", tmp_json.path().to_str().unwrap()];
if ignore_unknown_modules {
args.push("--ignore-unknown-modules");
}
args.push(tmp_sv.path().to_str().unwrap());
let output = Command::new(slang_path).args(args).output()?;
if !output.status.success() {
return Err(format!("slang command failed with status: {}", output.status).into());
}
let json_data = fs::read_to_string(tmp_json)?;
let json_value: Value = serde_json::from_str(&json_data)?;
Ok(json_value)
}