#semver #version-string #version #semantic #compare

versions

一个用于解析和比较软件版本号的库

20 个稳定版本 (5 个主要版本)

6.3.2 2024年8月9日
6.3.0 2024年6月15日
6.2.0 2024年3月18日
6.0.0 2023年12月6日
1.0.1 2020年6月15日

#44解析器实现

Download history 31614/week @ 2024-05-01 35684/week @ 2024-05-08 29097/week @ 2024-05-15 28166/week @ 2024-05-22 30022/week @ 2024-05-29 28521/week @ 2024-06-05 32006/week @ 2024-06-12 27311/week @ 2024-06-19 31691/week @ 2024-06-26 27238/week @ 2024-07-03 34466/week @ 2024-07-10 32052/week @ 2024-07-17 39922/week @ 2024-07-24 38497/week @ 2024-07-31 38914/week @ 2024-08-07 39588/week @ 2024-08-14

162,531 每月下载量
用于 53 个crate(28 个直接使用)

MIT 许可证

86KB
1.5K SLoC

版本

Tests

一个用于解析和比较软件版本号的库。

我们喜欢以多种方式给我们的软件版本号。一些方式遵循严格的递增和比较规则。一些遵循传统智慧,通常是一致的。还有一些是愚蠢的。此库提供了一种解析和比较任何风格版本号的方法,无论是这种漂亮的语义版本号

1.2.3-r1

...或者像这样的一团糟

2:10.2+0.0093r3+1-1

使用方法

如果您正在解析多个不遵循单一方案的版本号(例如,系统包),则使用 Versioning 类型及其解析器 Versioning::new。否则,每个主要类型 - SemVerVersionMess - 都可以通过 new 方法单独解析(例如 SemVer::new)。

示例

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!

版本约束

cargo 这样的工具还允许在版本号之前添加版本约束,例如 ^1.2.3

use versions::{Requirement, Versioning};

let req = Requirement::new("^1.2.3").unwrap();
let ver = Versioning::new("1.2.4").unwrap();
assert!(req.matches(&ver));

在这种情况下,传入的版本 1.2.4

查看Requirement类型获取更多详细信息。

nom的使用

在构建自己的nom解析器时,您可以通过Versioning::parseSemVer::parseVersion::parseMess::parse整合此crate中用于类型的解析器。

特性

您可以使用serde特性启用对序列化和反序列化的Serde支持。

默认情况下,版本结构体以原样进行序列化和反序列化。如果您希望直接从类似1.2.3的原始版本字符串进行反序列化,请参阅Versioning::deserialize_pretty

依赖项

~1.5MB
~31K SLoC