Skip to main content

releasaurus_core/config/
prerelease.rs

1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3use strum::{Display, EnumString};
4
5use crate::result::{ReleasaurusError, Result};
6
7/// Determines how prerelease identifiers should be appended to versions
8#[derive(
9    Debug,
10    Clone,
11    Copy,
12    Serialize,
13    Deserialize,
14    JsonSchema,
15    PartialEq,
16    Eq,
17    Default,
18    Display,
19    EnumString,
20)]
21#[serde(rename_all = "lowercase")]
22#[strum(serialize_all = "lowercase")]
23pub enum PrereleaseStrategy {
24    /// Adds numeric suffixes like `.1`, `.2`, etc. to prerelease identifiers.
25    #[default]
26    Versioned,
27    /// Reuses the exact prerelease identifier without numeric suffixes
28    Static,
29}
30
31/// Configurable prerelease settings for both global and package scopes
32#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, Default)]
33#[serde(default)]
34pub struct PrereleaseConfig {
35    /// Prerelease identifier (e.g., "alpha", "beta", "rc", "SNAPSHOT")
36    pub suffix: Option<String>,
37    /// How prerelease suffixes should be applied to versions
38    pub strategy: PrereleaseStrategy,
39}
40
41impl PrereleaseConfig {
42    /// Returns the suffix for configs that have been resolved
43    pub fn suffix(&self) -> Result<&str> {
44        self.suffix.as_deref().ok_or_else(|| {
45            ReleasaurusError::invalid_config(
46                "resolved prerelease config must include suffix",
47            )
48        })
49    }
50}