use indexmap::IndexMap;
pub type VersionComponentConfigs = IndexMap<String, VersionComponentSpec>;
#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct VersionComponentSpec {
pub independent: Option<bool>,
pub optional_value: Option<String>,
pub values: Vec<String>,
pub first_value: Option<String>,
pub always_increment: bool,
pub calver_format: Option<String>,
pub depends_on: Option<String>,
}
#[must_use]
pub fn version_component_configs(config: &super::FinalizedConfig) -> VersionComponentConfigs {
let parsing_groups = config
.global
.parse_version_pattern
.capture_names()
.flatten();
let component_configs: VersionComponentConfigs = parsing_groups
.map(|label| {
use super::MergeWith;
let is_independent = label.starts_with('$');
let mut spec = match config.components.get(label) {
Some(part) => part.clone(),
None => VersionComponentSpec::default(),
};
spec.independent.merge_with(Some(&is_independent));
(label.to_string(), spec)
})
.collect();
component_configs
}