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 在 解析器实现
162,531 每月下载量
用于 53 个crate(28 个直接使用)
86KB
1.5K SLoC
版本
一个用于解析和比较软件版本号的库。
我们喜欢以多种方式给我们的软件版本号。一些方式遵循严格的递增和比较规则。一些遵循传统智慧,通常是一致的。还有一些是愚蠢的。此库提供了一种解析和比较任何风格版本号的方法,无论是这种漂亮的语义版本号
1.2.3-r1
...或者像这样的一团糟
2:10.2+0.0093r3+1-1
使用方法
如果您正在解析多个不遵循单一方案的版本号(例如,系统包),则使用 Versioning
类型及其解析器 Versioning::new
。否则,每个主要类型 - SemVer
,Version
或 Mess
- 都可以通过 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::parse
、SemVer::parse
、Version::parse
和Mess::parse
整合此crate中用于类型的解析器。
特性
您可以使用serde
特性启用对序列化和反序列化的Serde
支持。
默认情况下,版本结构体以原样进行序列化和反序列化。如果您希望直接从类似1.2.3
的原始版本字符串进行反序列化,请参阅Versioning::deserialize_pretty
。
依赖项
~1.5MB
~31K SLoC