winbrew_models\package/
dependency.rs

1use serde::{Deserialize, Serialize};
2
3use crate::shared::validation::{Validate, ensure_non_empty};
4use crate::shared::{ModelError, Version};
5
6/// A single dependency entry declared by a package.
7///
8/// Dependencies are stored as package ids plus an optional minimum version so
9/// downstream code can reason about ordering and compatibility without parsing
10/// source-specific metadata again.
11#[derive(Debug, Clone, Serialize, Deserialize)]
12pub struct Dependency {
13    /// The dependency package id or identifier.
14    pub id: String,
15    /// Optional minimum version constraint for the dependency.
16    pub version: Option<Version>,
17}
18
19impl Dependency {
20    /// Validate the dependency id and any attached version constraint.
21    pub fn validate(&self) -> Result<(), ModelError> {
22        ensure_non_empty("dependency.id", &self.id)?;
23        if let Some(version) = &self.version {
24            version.validate()?;
25        }
26        Ok(())
27    }
28}
29
30impl Validate for Dependency {
31    fn validate(&self) -> Result<(), ModelError> {
32        Dependency::validate(self)
33    }
34}