use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub struct Stage {
#[serde(default)]
pub build: StageBuild,
#[serde(default)]
pub test: StageTest,
#[serde(default)]
pub release: StageRelease,
}
impl Default for Stage {
fn default() -> Self {
Self {
build: StageBuild { command: None },
test: StageTest {
command: None,
threshold: 70.0,
},
release: StageRelease {
changelog: "CHANGELOG.md".into(),
pre_publish: Vec::new(),
},
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub struct StageBuild {
#[serde(default)]
pub command: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub struct StageTest {
#[serde(default)]
pub command: Option<String>,
#[serde(default = "default_threshold")]
pub threshold: f64,
}
impl Default for StageTest {
fn default() -> Self {
Self {
command: None,
threshold: 70.0,
}
}
}
const fn default_threshold() -> f64 {
70.0
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub struct StageRelease {
#[serde(default = "default_changelog")]
pub changelog: String,
#[serde(default)]
pub pre_publish: Vec<String>,
}
fn default_changelog() -> String {
"CHANGELOG.md".into()
}
impl Default for StageRelease {
fn default() -> Self {
Self {
changelog: "CHANGELOG.md".into(),
pre_publish: Vec::new(),
}
}
}