haz-domain 0.2.0

Shared domain types for the haz task runner (identifiers, paths, errors).
Documentation
//! `cache.clean` workspace settings per `CFG-034` / `CFG-035`.
//!
//! The two sub-fields ([`max_age::MaxAge`], [`max_size::MaxSize`])
//! live in their own submodules so each can carry its own
//! `Snafu`-derived error enum without colliding variant names at
//! module scope.

pub mod max_age;
pub mod max_size;

use crate::settings::cache_clean::max_age::MaxAge;
use crate::settings::cache_clean::max_size::MaxSize;

/// Workspace-level defaults for `haz cache clean` thresholds.
///
/// `Default::default()` yields the `CFG-034` / `CFG-035` defaults:
/// both fields absent. A `haz cache clean --max-age` /
/// `--max-size` CLI invocation supplies the threshold explicitly
/// when the workspace declares none.
///
/// # Examples
///
/// ```
/// use haz_domain::settings::cache_clean::CacheCleanSettings;
///
/// let cs = CacheCleanSettings::default();
/// assert!(cs.max_age.is_none());
/// assert!(cs.max_size.is_none());
/// ```
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash)]
pub struct CacheCleanSettings {
    /// Workspace-level default age threshold (`CFG-034`). `None`
    /// when the workspace does not declare one.
    pub max_age: Option<MaxAge>,
    /// Workspace-level default size threshold (`CFG-035`). `None`
    /// when the workspace does not declare one.
    pub max_size: Option<MaxSize>,
}

#[cfg(test)]
mod tests {
    use super::CacheCleanSettings;
    use crate::settings::cache_clean::max_age::MaxAge;
    use crate::settings::cache_clean::max_size::MaxSize;

    #[test]
    fn default_cache_clean_settings_have_no_thresholds() {
        let cs = CacheCleanSettings::default();
        assert!(cs.max_age.is_none());
        assert!(cs.max_size.is_none());
    }

    #[test]
    fn cache_clean_settings_carry_supplied_values() {
        let cs = CacheCleanSettings {
            max_age: Some(MaxAge::parse("90d").unwrap()),
            max_size: Some(MaxSize::parse("5GB").unwrap()),
        };
        assert!(cs.max_age.is_some());
        assert!(cs.max_size.is_some());
    }
}