pub struct VersionComparator;Expand description
Version comparison utilities for semantic version operations.
This struct provides static methods for comparing semantic versions, finding newer versions, and handling version parsing with common prefixes. All methods are designed to handle malformed version strings gracefully.
Implementations§
Source§impl VersionComparator
impl VersionComparator
Sourcepub fn has_newer_version(current: &str, versions: &[String]) -> Result<bool>
pub fn has_newer_version(current: &str, versions: &[String]) -> Result<bool>
Checks if there are newer versions available than the current version.
This method compares the current version against a list of available versions
and returns true if any version is semantically newer.
§Arguments
current- The current version string (e.g., “v1.0.0”, “1.2.3”)versions- A slice of version strings to compare against
§Returns
Ok(true) if newer versions exist, Ok(false) if current is latest.
§Errors
Returns an error if the current version string cannot be parsed as a semantic version. Malformed versions in the comparison list are ignored.
§Examples
use agpm_cli::version::comparison::VersionComparator;
let versions = vec!["v1.0.0".to_string(), "v1.1.0".to_string(), "v2.0.0".to_string()];
// Check if v1.0.0 has newer versions available
let has_newer = VersionComparator::has_newer_version("v1.0.0", &versions)?;
assert!(has_newer);
// Check if v2.0.0 is the latest
let has_newer = VersionComparator::has_newer_version("v2.0.0", &versions)?;
assert!(!has_newer);Sourcepub fn get_newer_versions<'a>(
current: &str,
versions: &'a [String],
) -> Result<Vec<&'a String>>
pub fn get_newer_versions<'a>( current: &str, versions: &'a [String], ) -> Result<Vec<&'a String>>
Gets all versions newer than the current version, sorted by version descending.
This method finds all versions in the provided list that are semantically newer than the current version and returns them sorted from newest to oldest.
§Arguments
current- The current version string to compare againstversions- A slice of version strings to search
§Returns
A vector of references to version strings that are newer than current, sorted in descending order (newest first).
§Errors
Returns an error if the current version string cannot be parsed. Malformed versions in the search list are silently ignored.
§Examples
use agpm_cli::version::comparison::VersionComparator;
let versions = vec![
"v1.0.0".to_string(),
"v1.2.0".to_string(),
"v1.1.0".to_string(),
"v2.0.0".to_string(),
];
let newer = VersionComparator::get_newer_versions("v1.0.0", &versions)?;
assert_eq!(newer.len(), 3);
// Results are sorted newest first
assert_eq!(newer[0], "v2.0.0");
assert_eq!(newer[1], "v1.2.0");
assert_eq!(newer[2], "v1.1.0");Sourcepub fn get_latest(versions: &[String]) -> Result<Option<&String>>
pub fn get_latest(versions: &[String]) -> Result<Option<&String>>
Gets the latest (highest) semantic version from a list of versions.
This method finds the semantically highest version from the provided list, ignoring any malformed version strings.
§Arguments
versions- A slice of version strings to search
§Returns
Ok(Some(&String)) with the latest version, or Ok(None) if the list is
empty or contains no valid semantic versions.
§Errors
This method does not return errors - malformed version strings are silently ignored during comparison.
§Examples
use agpm_cli::version::comparison::VersionComparator;
let versions = vec![
"v1.0.0".to_string(),
"v2.0.0".to_string(),
"v1.5.0".to_string(),
"invalid-version".to_string(), // This will be ignored
];
let latest = VersionComparator::get_latest(&versions)?
.expect("Should find a latest version");
assert_eq!(latest, "v2.0.0");
// Empty list returns None
let empty: Vec<String> = vec![];
assert!(VersionComparator::get_latest(&empty)?.is_none());