1pub mod change;
2pub mod errors;
3pub mod semver;
4
5pub use change::SemVerChangeID;
6pub use semver::SemVer;
7
8pub fn max(semvers: &Vec<SemVer>) -> SemVer {
9 let mut latest = semvers.get(0).unwrap();
10
11 for semver in semvers {
12 let gt = semver.gt(latest);
13
14 if gt.is_ok() && gt.unwrap() {
15 latest = &semver;
16 }
17 }
18
19 return latest.clone();
20}
21
22pub fn min(semvers: &Vec<SemVer>) -> SemVer {
23 let mut oldest = semvers.get(0).unwrap();
24
25 for semver in semvers {
26 let lt = semver.lt(oldest);
27
28 if lt.is_ok() && lt.unwrap() {
29 oldest = &semver;
30 }
31 }
32
33 return oldest.clone();
34}
35
36pub fn range(semvers: Vec<SemVer>) -> (SemVer, SemVer) {
37 let latest = max(&semvers);
38 let oldest = min(&semvers);
39
40 return (oldest, latest);
41}
42
43pub fn range_str(semvers: Vec<SemVer>) -> String {
44 let latest = max(&semvers).to_string();
45 let oldest = min(&semvers).to_string();
46
47 return format!("{} - {}", oldest, latest);
48}
49
50pub fn deduplicate(semvers: Vec<SemVer>) -> Vec<SemVer> {
51 let mut deduped: Vec<SemVer> = Vec::new();
52
53 for semver in semvers {
54 if !deduped.contains(&semver) {
55 deduped.push(semver);
56 }
57 }
58
59 return deduped;
60}