use anyhow::Result;
use clap::Parser;
use hugr::extension::ExtensionRegistry;
use std::{io::Write, path::PathBuf};
#[derive(Parser, Debug)]
#[clap(version = "1.0", long_about = None)]
#[clap(about = "Write standard extensions.")]
#[group(id = "hugr")]
#[non_exhaustive]
pub struct ExtArgs {
#[arg(
default_value = ".",
short,
long,
value_name = "OUTPUT",
help = "Output directory."
)]
pub outdir: PathBuf,
}
impl ExtArgs {
pub fn run_dump(&self, registry: &ExtensionRegistry) -> Result<()> {
let base_dir = &self.outdir;
for ext in registry {
let mut path = base_dir.clone();
for part in ext.name().split('.') {
path.push(part);
}
path.set_extension("json");
std::fs::create_dir_all(path.clone().parent().unwrap())?;
let mut file = std::fs::File::create(&path)?;
serde_json::to_writer_pretty(&mut file, &ext)?;
file.write_all(b"\n")?;
}
Ok(())
}
}