Skip to main content

Crate semver

Crate semver 

Source
Expand description

A Semantic Versioning 2.0.0 parser and comparator.

§Usage

use semver::parse;

let v = parse("1.2.3").unwrap();
assert_eq!(v.major, 1);
assert_eq!(v.minor, 2);
assert_eq!(v.patch, 3);

let v = parse("1.0.0-alpha.1+build.123").unwrap();
assert_eq!(v.to_string(), "1.0.0-alpha.1+build.123");

Parsing follows the full SemVer 2.0.0 BNF grammar, including pre-release identifiers with hyphens, leading-zero rejection on numeric identifiers, and build metadata validation.

§Version struct

The Version struct borrows its pre-release and build-metadata strings from the input, so no allocation is needed for parsing.

§Precedence

Version implements PartialEq, Eq, PartialOrd, and Ord following the SemVer precedence rules:

  • Compare major, minor, patch numerically.
  • A pre-release version has lower precedence than a normal version.
  • Pre-release identifiers are compared left-to-right: numeric identifiers are compared numerically, alphanumeric identifiers are compared lexically (ASCII), and numeric always precedes alpha.
  • A longer pre-release has higher precedence when all preceding identifiers are equal.
  • Build metadata is ignored for equality and ordering.
use semver::parse;

assert!(parse("1.0.0-alpha").unwrap() < parse("1.0.0").unwrap());
assert!(parse("1.0.0-beta.2").unwrap() < parse("1.0.0-beta.11").unwrap());
assert!(parse("1.0.0-1").unwrap() < parse("1.0.0-alpha").unwrap());
assert_eq!(parse("1.0.0+build1").unwrap(), parse("1.0.0+build2").unwrap());

§Serde support

Enable the serde feature to serialize/deserialize Version as a string:

[dependencies]
semver = { path = "../semver", features = ["serde"] }
use serde_json;
use semver::parse;

let v: semver::Version<'_> = serde_json::from_str("\"1.2.3-alpha+build\"").unwrap();
assert_eq!(v, parse("1.2.3-alpha+build").unwrap());

§Error handling

use semver::parse;

assert!(parse("01.2.3").is_err());
assert!(parse("1.0.0-").is_err());
assert!(parse("").is_err());

Structs§

BuildMetadata
The build metadata portion of a SemVer version (after the +).
PreRelease
The pre-release portion of a SemVer version (after the -).
Version
A parsed SemVer version (Semantic Versioning 2.0.0).

Enums§

Identifier
A parsed pre-release identifier: either a numeric value or an alphanumeric string.
ParseError
Errors that can occur when parsing a SemVer version string.

Functions§

parse
Parses a SemVer version string.