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