Semantic versioning with range parsing, comparison, and bumping
cargo add philiprehberger-semver-utilSemantic versioning with range parsing, comparison, and bumping
[dependencies]
philiprehberger-semver-util = "0.2.2"
use philiprehberger_semver_util::{Version, VersionRange};
// Parse and compare versions
let v1 = Version::parse("1.2.3").unwrap();
let v2 = Version::parse("1.3.0").unwrap();
assert!(v1 < v2);
// Bump versions
let v3 = v1.bump_minor();
assert_eq!(v3.to_string(), "1.3.0");
// Parse and match ranges
let range = VersionRange::parse("^1.2.0").unwrap();
assert!(range.matches(&v1));
assert!(range.matches(&v2));
assert!(!range.matches(&Version::parse("2.0.0").unwrap()));
// Default version
let zero = Version::default();
assert_eq!(zero.to_string(), "0.0.0");
// Pre-release and stability checks
assert!(Version::parse("1.0.0").unwrap().is_stable());
assert!(!Version::parse("0.9.0").unwrap().is_stable());
assert!(Version::parse("1.0.0-alpha.1").unwrap().is_pre_release());
// VersionRange Display and FromStr
let range: VersionRange = ">=1.0.0, <2.0.0".parse().unwrap();
println!("{}", range); // ">=1.0.0, <2.0.0"
| Function / Type | Description |
|---|---|
Version::parse(s) | Parse a semver string |
Version::new(maj, min, pat) | Create a version |
.bump_major() | Bump major version |
.bump_minor() | Bump minor version |
.bump_patch() | Bump patch version |
.bump_pre(label) | Set/increment pre-release |
VersionRange::parse(s) | Parse a version range |
.matches(version) | Check if version satisfies range |
sort_versions(versions) | Sort versions in semver order |
.is_pre_release() | Check if version has pre-release |
.is_stable() | Check if major >= 1 and no pre-release |
Version::default() | Create version 0.0.0 |
VersionRange Display | Print range expression |
VersionRange FromStr | Parse range from string |
cargo test
cargo clippy -- -D warnings
If you find this project useful: