releasaurus-core 0.20.0

A comprehensive release automation tool that streamlines the software release process across multiple programming languages and forge platforms
Documentation
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use strum::{Display, EnumString};

use crate::result::{ReleasaurusError, Result};

/// Determines how prerelease identifiers should be appended to versions
#[derive(
    Debug,
    Clone,
    Copy,
    Serialize,
    Deserialize,
    JsonSchema,
    PartialEq,
    Eq,
    Default,
    Display,
    EnumString,
)]
#[serde(rename_all = "lowercase")]
#[strum(serialize_all = "lowercase")]
pub enum PrereleaseStrategy {
    /// Adds numeric suffixes like `.1`, `.2`, etc. to prerelease identifiers.
    #[default]
    Versioned,
    /// Reuses the exact prerelease identifier without numeric suffixes
    Static,
}

/// Configurable prerelease settings for both global and package scopes
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, Default)]
#[serde(default)]
pub struct PrereleaseConfig {
    /// Prerelease identifier (e.g., "alpha", "beta", "rc", "SNAPSHOT")
    pub suffix: Option<String>,
    /// How prerelease suffixes should be applied to versions
    pub strategy: PrereleaseStrategy,
}

impl PrereleaseConfig {
    /// Returns the suffix for configs that have been resolved
    pub fn suffix(&self) -> Result<&str> {
        self.suffix.as_deref().ok_or_else(|| {
            ReleasaurusError::invalid_config(
                "resolved prerelease config must include suffix",
            )
        })
    }
}