1use crate::{
6 constraint::{Operator, SingleConstraint},
7 error::Result,
8 parser::VersionParser,
9};
10
11pub fn compare(version1: &str, operator: &str, version2: &str) -> Result<bool> {
24 let v1_normalized = VersionParser::normalize(version1)?;
25 let v2_normalized = VersionParser::normalize(version2)?;
26
27 let op = Operator::parse(operator)?;
28 let constraint = SingleConstraint::new(op, &v2_normalized);
29 let provider = SingleConstraint::new(Operator::Eq, &v1_normalized);
30
31 Ok(constraint.match_specific(&provider, true))
32}
33
34pub fn greater_than(version1: &str, version2: &str) -> Result<bool> {
39 compare(version1, ">", version2)
40}
41
42pub fn greater_than_or_equal_to(version1: &str, version2: &str) -> Result<bool> {
47 compare(version1, ">=", version2)
48}
49
50pub fn less_than(version1: &str, version2: &str) -> Result<bool> {
55 compare(version1, "<", version2)
56}
57
58pub fn less_than_or_equal_to(version1: &str, version2: &str) -> Result<bool> {
63 compare(version1, "<=", version2)
64}
65
66pub fn equal_to(version1: &str, version2: &str) -> Result<bool> {
71 compare(version1, "==", version2)
72}
73
74pub fn not_equal_to(version1: &str, version2: &str) -> Result<bool> {
79 compare(version1, "!=", version2)
80}
81
82#[cfg(test)]
83mod tests {
84 use super::*;
85
86 #[test]
87 fn test_greater_than() {
88 assert!(greater_than("1.25.0", "1.24.0").unwrap());
89 assert!(!greater_than("1.25.0", "1.25.0").unwrap());
90 assert!(!greater_than("1.25.0", "1.26.0").unwrap());
91 }
92
93 #[test]
94 fn test_less_than() {
95 assert!(!less_than("1.25.0", "1.24.0").unwrap());
96 assert!(!less_than("1.25.0", "1.25.0").unwrap());
97 assert!(less_than("1.25.0", "1.26.0").unwrap());
98 }
99
100 #[test]
101 fn test_equal_to() {
102 assert!(!equal_to("1.25.0", "1.24.0").unwrap());
103 assert!(equal_to("1.25.0", "1.25.0").unwrap());
104 assert!(!equal_to("1.25.0", "1.26.0").unwrap());
105 }
106}