hdiff_update_core/
version.rs1use 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}