A library for parsing and comparing software version numbers.
We like to give version numbers to our software in a myriad of different ways. Some ways follow strict guidelines for incrementing and comparison. Some follow conventional wisdom and are generally self-consistent. Some are just plain asinine. This library provides a means of parsing and comparing any style of versioning, be it a nice Semantic Version like this:
…or a monstrosity like this:
If you’re parsing several version numbers that don’t follow a single scheme
(say, as in system packages), then use the
Versioning type and its
Versioning::new. Otherwise, each main type -
Mess - can be parsed on their own via the
use versions::Versioning; let good = Versioning::new("1.6.0").unwrap(); let evil = Versioning::new("1.6.0a+2014+m872b87e73dfb-1").unwrap(); assert!(good.is_ideal()); // It parsed as a `SemVer`. assert!(evil.is_complex()); // It parsed as a `Mess`. assert!(good > evil); // We can compare them anyway!
You can enable
Serde support for serialization and
deserialization with the
A complex version number with no specific structure.
An ideal version number that conforms to Semantic Versioning.
A version number with decent structure and comparison logic.