Skip to main content

hdiff_update_core/
version.rs

1use semver::Version;
2
3use crate::{Error, Result};
4
5pub fn validate_version_upgrade(current: &str, target: &str) -> Result<()> {
6    let current_version = parse_version(current)?;
7    let target_version = parse_version(target)?;
8    if target_version <= current_version {
9        return Err(Error::NonUpgradeVersion {
10            current: current.to_string(),
11            target: target.to_string(),
12        });
13    }
14    Ok(())
15}
16
17fn parse_version(value: &str) -> Result<Version> {
18    Version::parse(value.trim()).map_err(|error| Error::InvalidVersion {
19        value: value.to_string(),
20        message: error.to_string(),
21    })
22}
23
24#[cfg(test)]
25mod tests {
26    use super::validate_version_upgrade;
27
28    #[test]
29    fn accepts_only_strict_semver_upgrades() {
30        assert!(validate_version_upgrade("1.2.3", "1.2.4").is_ok());
31        assert!(validate_version_upgrade("1.2.3-beta.1", "1.2.3").is_ok());
32        assert!(validate_version_upgrade("1.2.3", "1.2.3").is_err());
33        assert!(validate_version_upgrade("1.2.4", "1.2.3").is_err());
34        assert!(validate_version_upgrade("latest", "next").is_err());
35    }
36}