use anyhow::{Context, Result as AnyResult};
use derive_builder::Builder;
use serde::{Deserialize, Serialize};
#[derive(
Builder,
Debug,
Default,
PartialEq,
Eq,
Hash,
Clone,
Serialize,
Deserialize,
)]
#[builder(setter(into))]
pub struct Powerset {
#[builder(default = "2")]
pub depth: i32,
#[builder(default = "false")]
pub exclude_no_default_features: bool,
}
impl PowersetBuilder {
pub fn run(&self) -> AnyResult<()> {
let t = self
.build()
.context("Failed to build Powerset configuration")?;
let depth = t.depth.to_string();
let mut common_args =
vec![
"--workspace",
"--exclude",
"xtask",
"--feature-powerset",
"--depth",
&depth,
];
if t.exclude_no_default_features {
common_args.push("--exclude-no-default-features");
}
let mut clippy_args = common_args.clone();
clippy_args.extend(["--", "-D", "warnings"]);
std::process::Command::new("cargo")
.args(["hack", "clippy"])
.args(&clippy_args)
.status()
.context("Failed to execute 'cargo hack clippy'")?;
let mut test_args = common_args.clone();
test_args.push("test");
std::process::Command::new("cargo")
.args(["hack"])
.args(&test_args)
.status()
.context("Failed to execute 'cargo hack test'")?;
let mut doc_test_args = common_args;
doc_test_args.extend(["test", "--doc"]);
std::process::Command::new("cargo")
.args(["hack"])
.args(&doc_test_args)
.status()
.context("Failed to execute 'cargo hack test --doc'")?;
Ok(())
}
pub fn new(depth: i32) -> Self {
let mut builder = Self::default();
builder.depth(depth);
builder
}
}
pub fn powerset() -> AnyResult<()> {
PowersetBuilder::default().run()
}