use std::collections::HashMap;
use derive_builder::Builder;
use merge::Merge;
use url::Url;
use crate::config::{
changelog::{ChangelogConfig, RewordedCommit},
prerelease::{PrereleaseConfig, PrereleaseStrategy},
};
#[derive(Debug, Clone, Merge)]
pub struct PackageOverrides {
#[merge(strategy = merge::option::overwrite_none)]
pub tag_prefix: Option<String>,
#[merge(strategy = merge::option::overwrite_none)]
pub prerelease_suffix: Option<String>,
#[merge(strategy = merge::option::overwrite_none)]
pub prerelease_strategy: Option<PrereleaseStrategy>,
}
#[derive(Debug, Clone, Default, Merge)]
pub struct GlobalOverrides {
#[merge(strategy = merge::option::overwrite_none)]
pub base_branch: Option<String>,
#[merge(strategy = merge::option::overwrite_none)]
pub tag_prefix: Option<String>,
#[merge(strategy = merge::option::overwrite_none)]
pub prerelease_suffix: Option<String>,
#[merge(strategy = merge::option::overwrite_none)]
pub prerelease_strategy: Option<PrereleaseStrategy>,
}
pub type PackageName = String;
#[derive(Debug, Clone, Default)]
pub struct CommitModifiers {
pub skip_shas: Vec<String>,
pub reword: Vec<RewordedCommit>,
}
#[derive(Debug, Builder)]
#[builder(setter(into))]
pub struct ResolvedConfig {
pub repo_name: String,
pub base_branch: String,
pub release_link_base_url: Url,
pub compare_link_base_url: Url,
pub package_overrides: HashMap<PackageName, PackageOverrides>,
pub global_overrides: GlobalOverrides,
pub commit_modifiers: CommitModifiers,
pub first_release_search_depth: u64,
pub separate_pull_requests: bool,
pub prerelease: PrereleaseConfig,
pub auto_start_next: Option<bool>,
pub breaking_always_increment_major: bool,
pub features_always_increment_minor: bool,
pub custom_major_increment_regex: Option<String>,
pub custom_minor_increment_regex: Option<String>,
pub changelog: ChangelogConfig,
}