pub mod patch;
pub mod resolve;
use self::patch::{FeatureSetVecPatch, StringSetPatch};
use serde::{Deserialize, Serialize};
use std::collections::{BTreeMap, HashMap, HashSet};
fn default_true() -> bool {
true
}
#[derive(Serialize, Deserialize, Debug, Clone)]
#[allow(clippy::struct_excessive_bools)]
pub struct Config {
#[serde(default)]
pub isolated_feature_sets: Vec<HashSet<String>>,
#[serde(default)]
pub exclude_features: HashSet<String>,
#[serde(default)]
pub include_features: HashSet<String>,
#[serde(default)]
pub only_features: HashSet<String>,
#[serde(default)]
pub skip_optional_dependencies: bool,
#[serde(default)]
pub exclude_packages: HashSet<String>,
#[serde(default)]
pub exclude_feature_sets: Vec<HashSet<String>>,
#[serde(default)]
pub include_feature_sets: Vec<HashSet<String>>,
#[serde(default)]
pub allow_feature_sets: Vec<HashSet<String>>,
#[serde(default)]
pub no_empty_feature_set: bool,
#[serde(default = "default_true")]
pub prune_implied: bool,
#[serde(default)]
pub show_pruned: bool,
#[serde(default)]
pub matrix: HashMap<String, serde_json::Value>,
#[serde(default)]
pub target: BTreeMap<String, TargetOverride>,
#[serde(flatten)]
pub deprecated: DeprecatedConfig,
}
impl Default for Config {
fn default() -> Self {
Self {
isolated_feature_sets: Vec::new(),
exclude_features: HashSet::new(),
include_features: HashSet::new(),
only_features: HashSet::new(),
skip_optional_dependencies: false,
exclude_packages: HashSet::new(),
exclude_feature_sets: Vec::new(),
include_feature_sets: Vec::new(),
allow_feature_sets: Vec::new(),
no_empty_feature_set: false,
prune_implied: true,
show_pruned: false,
matrix: HashMap::new(),
target: BTreeMap::new(),
deprecated: DeprecatedConfig::default(),
}
}
}
#[derive(Serialize, Deserialize, Default, Debug, Clone)]
pub struct TargetOverride {
#[serde(default)]
pub replace: bool,
#[serde(default)]
pub isolated_feature_sets: Option<FeatureSetVecPatch>,
#[serde(default)]
pub exclude_features: Option<StringSetPatch>,
#[serde(default)]
pub include_features: Option<StringSetPatch>,
#[serde(default)]
pub only_features: Option<StringSetPatch>,
#[serde(default)]
pub skip_optional_dependencies: Option<bool>,
#[serde(default)]
pub exclude_feature_sets: Option<FeatureSetVecPatch>,
#[serde(default)]
pub include_feature_sets: Option<FeatureSetVecPatch>,
#[serde(default)]
pub allow_feature_sets: Option<FeatureSetVecPatch>,
#[serde(default)]
pub no_empty_feature_set: Option<bool>,
#[serde(default)]
pub prune_implied: Option<bool>,
#[serde(default)]
pub show_pruned: Option<bool>,
#[serde(default)]
pub matrix: Option<HashMap<String, serde_json::Value>>,
}
#[derive(Serialize, Deserialize, Default, Debug, Clone)]
pub struct WorkspaceConfig {
#[serde(default)]
pub exclude_packages: HashSet<String>,
}
#[derive(Serialize, Deserialize, Default, Debug, Clone)]
pub struct DeprecatedConfig {
#[serde(default)]
pub skip_feature_sets: Vec<HashSet<String>>,
#[serde(default)]
pub denylist: HashSet<String>,
#[serde(default)]
pub exact_combinations: Vec<HashSet<String>>,
}