use std::path::PathBuf;
use crate::{
options::{BuildOptions, FuzzDirWrapper},
project::FuzzProject,
RunCommand,
};
use anyhow::{bail, Result};
use clap::Parser;
#[derive(Clone, Debug, Parser)]
pub struct Coverage {
#[command(flatten)]
pub build: BuildOptions,
#[command(flatten)]
pub fuzz_dir_wrapper: FuzzDirWrapper,
#[arg(long)]
pub llvm_path: Option<PathBuf>,
pub target: String,
pub corpus: Vec<String>,
#[arg(last(true))]
pub args: Vec<String>,
}
impl RunCommand for Coverage {
fn run_command(&mut self) -> Result<()> {
if self.build.build_std {
bail!(
"-Zbuild-std is currently incompatible with -Zinstrument-coverage, \
see https://github.com/rust-lang/wg-cargo-std-aware/issues/63"
);
}
let project = FuzzProject::new(self.fuzz_dir_wrapper.fuzz_dir.to_owned())?;
self.build.coverage = true;
project.exec_coverage(self)
}
}