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