rez_next_version/
range.rs1use super::Version;
4use rez_next_common::RezCoreError;
5use serde::{Deserialize, Serialize};
6
7#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
9pub struct VersionRange {
10 pub range_str: String,
12}
13
14impl VersionRange {
15 pub fn new(range_str: String) -> Result<Self, RezCoreError> {
17 Self::parse(&range_str)
18 }
19
20 pub fn parse(range_str: &str) -> Result<Self, RezCoreError> {
22 Ok(VersionRange {
25 range_str: range_str.to_string(),
26 })
27 }
28
29 pub fn contains(&self, _version: &Version) -> bool {
31 true
33 }
34
35 pub fn as_str(&self) -> &str {
37 &self.range_str
38 }
39
40 pub fn intersects(&self, _other: &VersionRange) -> bool {
42 true
44 }
45
46 pub fn intersect(&self, _other: &VersionRange) -> Option<VersionRange> {
48 Some(self.clone())
50 }
51
52 pub fn is_any(&self) -> bool {
54 self.range_str.is_empty()
55 }
56}
57
58#[cfg(test)]
59mod tests {
60 use super::*;
61
62 #[test]
63 fn test_version_range_parsing() {
64 let range = VersionRange::parse("").unwrap();
66 assert!(range.is_any());
67
68 let range = VersionRange::parse("==1.0.0").unwrap();
70 assert_eq!(range.range_str, "==1.0.0");
71
72 let range = VersionRange::parse(">=1.0.0").unwrap();
74 assert_eq!(range.range_str, ">=1.0.0");
75 }
76
77 #[test]
78 fn test_version_range_intersect() {
79 let range1 = VersionRange::parse(">=1.0.0").unwrap();
80 let range2 = VersionRange::parse("<=2.0.0").unwrap();
81
82 let intersection = range1.intersect(&range2).unwrap();
83 assert_eq!(intersection.range_str, ">=1.0.0");
84 }
85}