Crate versions[][src]

Expand description

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:

1.2.3-r1

…or a monstrosity like this:

2:10.2+0.0093r3+1-1

Usage

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 parser Versioning::new. Otherwise, each main type - SemVer, Version, or Mess - can be parsed on their own via the new method (e.g. SemVer::new).

Examples

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!

Usage with nom

In constructing your own nom parsers, you can integrate the parsers used for the types in this crate via SemVer::parse, Version::parse, and Mess::parse.

Features

You can enable Serde support for serialization and deserialization with the serde feature.

Structs

A logical unit of a version number.

Multiple Chunk values.

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.

Enums

Possible values of a section of a Mess.

Symbols that separate groups of digits/letters in a version number. Used in the Mess.

A single unit of a version number. May be digits or a string of characters.

A top-level Versioning type which acts as a wrapper for the more specific types.