Skip to main content

rez_next_package/requirement/
display.rs

1//! Display implementations for requirement types.
2
3use std::fmt;
4
5use super::types::{EnvCondition, PlatformCondition, Requirement, VersionConstraint};
6
7impl fmt::Display for Requirement {
8    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
9        if self.weak {
10            write!(f, "~")?;
11        }
12        if let Some(ref namespace) = self.namespace {
13            write!(f, "{}::", namespace)?;
14        }
15        write!(f, "{}", self.name)?;
16        if let Some(ref constraint) = self.version_constraint {
17            write!(f, "{}", constraint)?;
18        }
19        for condition in &self.platform_conditions {
20            write!(f, "[{}]", condition)?;
21        }
22        for condition in &self.env_conditions {
23            write!(f, "[{}]", condition)?;
24        }
25        Ok(())
26    }
27}
28
29impl fmt::Display for PlatformCondition {
30    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
31        let op = if self.negate { "!=" } else { "==" };
32        write!(
33            f,
34            "platform{}'{}'{}",
35            op,
36            self.platform,
37            self.arch
38                .as_ref()
39                .map_or(String::new(), |a| format!(" and arch=='{}'", a))
40        )
41    }
42}
43
44impl fmt::Display for EnvCondition {
45    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
46        let op = if self.negate { "!=" } else { "==" };
47        match &self.expected_value {
48            Some(value) => write!(f, "env.{}{}'{}'", self.var_name, op, value),
49            None => write!(f, "env.{}", self.var_name),
50        }
51    }
52}
53
54impl fmt::Display for VersionConstraint {
55    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
56        match self {
57            VersionConstraint::Exact(v) => write!(f, "=={}", v.as_str()),
58            VersionConstraint::GreaterThan(v) => write!(f, ">{}", v.as_str()),
59            VersionConstraint::GreaterThanOrEqual(v) => write!(f, ">={}", v.as_str()),
60            VersionConstraint::LessThan(v) => write!(f, "<{}", v.as_str()),
61            VersionConstraint::LessThanOrEqual(v) => write!(f, "<={}", v.as_str()),
62            VersionConstraint::Compatible(v) => write!(f, "~={}", v.as_str()),
63            VersionConstraint::Range(min, max) => {
64                write!(f, ">={},<{}", min.as_str(), max.as_str())
65            }
66            VersionConstraint::Multiple(constraints) => {
67                let strs: Vec<String> = constraints.iter().map(|c| c.to_string()).collect();
68                write!(f, "{}", strs.join(","))
69            }
70            VersionConstraint::Alternative(constraints) => {
71                let strs: Vec<String> = constraints.iter().map(|c| c.to_string()).collect();
72                write!(f, "({})", strs.join(" || "))
73            }
74            VersionConstraint::Exclude(versions) => {
75                let strs: Vec<String> = versions
76                    .iter()
77                    .map(|v| format!("!={}", v.as_str()))
78                    .collect();
79                write!(f, "{}", strs.join(","))
80            }
81            VersionConstraint::Wildcard(pattern) => write!(f, "=={}", pattern),
82            VersionConstraint::Prefix(v) => write!(f, "-{}", v.as_str()),
83            VersionConstraint::Any => write!(f, ""),
84        }
85    }
86}