Lenient Semantic Version Parser
Lenient parser for Semantic Version numbers.
Motivation
This crate aims to provide an alternative parser for semver Version
s.
Instead of adhering to the semver specification, this parser is more lenient in what it allows.
The differenc include:
- Minor and Path are optional an default to 0 (e.g. "1" parses as "1.0.0")
- Pre-release identifier may be separated by
.
as well (e.g. "1.2.3.rc1" parses as "1.2.3-rc1")
- Some pre-release identifiers are parsed as build identifier (e.g. "1.2.3.Final" parses as "1.2.3+Final")
- Additional numeric identifiers are parsed as build identifier (e.g "1.2.3.4.5" parses as "1.2.3+4.5")
- A leading
v
or V
is allowed (e.g. "v1.2.3" parses as "1.2.3")
This diagram shows lenient parsing grammar

Examples
```rust
use semver::Version;
let version = lenientsemver::parse::("1.2.3");
asserteq!(version, Ok(Version::new(1, 2, 3)));
// examples of a version that would not be accepted by semverparser
asserteq!(
lenientsemver::parse::("1.2.M1").unwrap(),
Version::parse("1.2.0-M1").unwrap()
);
assert!(Version::parse("1.2.M1").iserr());
asserteq!(
lenientsemver::parse::("1").unwrap(),
Version::parse("1.0.0").unwrap()
);
assert!(Version::parse("1").is_err());
asserteq!(
lenientsemver::parse::("1.2.3.Final").unwrap(),
Version::parse("1.2.3+Final").unwrap()
);
assert!(Version::parse("1.2.3.Final").is_err());
asserteq!(
lenientsemver::parse::("1.2.3.4.5").unwrap(),
Version::parse("1.2.3+4.5").unwrap()
);
assert!(Version::parse("1.2.3.4.5").is_err());
asserteq!(
lenientsemver::parse::("v1.2.3").unwrap(),
Version::parse("1.2.3").unwrap()
);
assert!(Version::parse("v1.2.3").is_err());
```
License: MIT OR Apache-2.0