use crate::types::VersioningStrategy;
use serde::{Deserialize, Serialize};
use sublime_standard_tools::config::{ConfigResult, Configurable};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(default)]
pub struct VersionConfig {
pub strategy: VersioningStrategy,
pub default_bump: String,
pub snapshot_format: String,
}
impl Default for VersionConfig {
fn default() -> Self {
Self {
strategy: VersioningStrategy::Independent,
default_bump: "patch".to_string(),
snapshot_format: "{version}-{branch}.{timestamp}".to_string(),
}
}
}
impl Configurable for VersionConfig {
fn validate(&self) -> ConfigResult<()> {
match self.default_bump.as_str() {
"major" | "minor" | "patch" | "none" => {}
_ => {
return Err(sublime_standard_tools::config::ConfigError::ValidationError {
message: format!(
"version.default_bump: Invalid bump type '{}'. Must be one of: major, minor, patch, none",
self.default_bump
),
});
}
}
if self.snapshot_format.is_empty() {
return Err(sublime_standard_tools::config::ConfigError::ValidationError {
message: "version.snapshot_format: Snapshot format cannot be empty".to_string(),
});
}
Ok(())
}
fn merge_with(&mut self, other: Self) -> ConfigResult<()> {
self.strategy = other.strategy;
self.default_bump = other.default_bump;
self.snapshot_format = other.snapshot_format;
Ok(())
}
}