#version #wildcard #comparison #latest-version

version-lp

a version struct library for use with version comparing, and wildcard resolving

3 unstable releases

Uses old Rust 2015

0.2.1 Dec 17, 2018
0.2.0 Nov 19, 2018
0.1.6 Nov 19, 2018

#1375 in Data structures


Used in 4 crates

MIT license

23KB
388 lines

version-lp-rs

A rust library for dealing with versions designed to be used with lovepack tools.

Overview

Contains a custom version Struct that is based on the Semantic Versioning System. Only supports the a.b.c format, but with any number of points, i.e. a.b, a.b.c.d are also valid versions. Also has support for wildcards when compairing Versions.


let wild_version = Version::from_str("2.*.*");

Version::from_string("2.3.4").unwrap().is_compatible_with(&wild_version) // will return true

And standard comparions can be used.


let ver_a = Version::from_str("2.1.4");
let ver_b = Version::from_str("2.2.3");
let ver_c = Version::from_str("2.1.4");


ver_a < ver_b // true
ver_a == ver_c // true

You can also get the latest available version from a list.

let versions : Vec<Version> = vec![
    Version::from_str("1.0.0").unwrap(),
    Version::from_str("1.0.1").unwrap(),
    Version::from_str("1.1.0").unwrap(),
    Version::from_str("1.0.2").unwrap()
];

let requirement = Version::from_str("1").unwrap();

let version = requirement.latest_compatible_version(&versions); // would be Version (1.1.0)

Notes for Success

  • You cannot compare against patterns, patterns can only be checked using the is_compatible_with function.
  • Wildcards will be assumed when compairing different length version numbers. 1.2 will be compatible with 1.2.3

Pattern Matching

Currently the only wildcard supported is *. But ^ can be achieved by using short versions: 1.2 would match with 1.2.1 to 1.2.100 and would return the latest version in a list using ::latest_compatible_version.

Dependencies

~2.7–4.5MB
~79K SLoC