simple_semver/
lib.rs

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}