4 个版本
0.1.3 | 2024年4月26日 |
---|---|
0.1.2 | 2023年11月1日 |
0.1.1 | 2023年6月29日 |
0.1.0 | 2023年6月26日 |
#220 in 解析器实现
14,335 每月下载量
用于 17 个包(3 个直接使用)
115KB
2.5K SLoC
PURL 解析、操作和格式化。
PURL 是一个指向软件包的标识符。例如,pkg:cargo/purl
指代此包。
此库在两个级别上支持 PURL
- PURL 的形状和格式由
GenericPurl
实现。可以通过使用类型如GenericPurl<String>
来处理与包类型无关的 PURL(也见 package-url/purl-spec#38)。 - 包类型的实现由
PackageType
和通过类型别名Purl
与GenericPurl
结合实现。此实现与 PURL 规范略有不同(详细信息见PackageType
)。可以通过实现PurlShape
特性来实现不同的包类型特定行为或支持不同的包类型。
示例
use std::str::FromStr;
use purl::GenericPurl;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let purl = GenericPurl::<String>::from_str(
"pkg:NPM/@acme/[email protected]?Checksum=sha256:\
E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855",
)?;
assert_eq!("npm", purl.package_type());
assert_eq!(Some("@acme"), purl.namespace());
assert_eq!("example", purl.name());
assert_eq!(Some("1.2.3"), purl.version());
// Normalization is performed during parsing.
assert_eq!(
"sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
purl.qualifiers()["checksum"],
);
assert_eq!(
"pkg:npm/%40acme/[email protected]?checksum=sha256:\
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
&purl.to_string(),
);
let purl = purl.into_builder().without_version().without_qualifier("checksum").build()?;
assert_eq!("pkg:npm/%40acme/example", &purl.to_string(),);
Ok(())
}
功能
- package-type:
PackageType
和相关类型 - serde: PURL 可以从字符串进行序列化和反序列化
- smartstring: 使用 smartstring crate 来减少堆分配
依赖项
~0.4–1MB
~23K SLoC