use anyhow::{Context, Result};
use clap::Parser;
use std::path::PathBuf;
use wasmtime_cli_flags::CommonOptions;
#[derive(Parser, PartialEq)]
pub struct ExploreCommand {
#[command(flatten)]
common: CommonOptions,
#[arg(long, value_name = "TARGET")]
target: Option<String>,
#[arg(required = true, value_name = "MODULE")]
module: PathBuf,
#[arg(short, long)]
output: Option<PathBuf>,
}
impl ExploreCommand {
pub fn execute(mut self) -> Result<()> {
self.common.init_logging()?;
let config = self.common.config(self.target.as_deref())?;
let wasm = std::fs::read(&self.module)
.with_context(|| format!("failed to read Wasm module: {}", self.module.display()))?;
let output = self
.output
.clone()
.unwrap_or_else(|| self.module.with_extension("explore.html"));
let output_file = std::fs::File::create(&output)
.with_context(|| format!("failed to create file: {}", output.display()))?;
let mut output_file = std::io::BufWriter::new(output_file);
wasmtime_explorer::generate(&config, self.target.as_deref(), &wasm, &mut output_file)?;
println!("Exploration written to {}", output.display());
Ok(())
}
}