#package #url #identifier #customizable #type #parser #format

purl

具有可自定义包类型的 Package URL 实现

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 解析器实现

Download history 2265/week @ 2024-04-16 2690/week @ 2024-04-23 2416/week @ 2024-04-30 2090/week @ 2024-05-07 2600/week @ 2024-05-14 2805/week @ 2024-05-21 2752/week @ 2024-05-28 2659/week @ 2024-06-04 2281/week @ 2024-06-11 2469/week @ 2024-06-18 1994/week @ 2024-06-25 4450/week @ 2024-07-02 3199/week @ 2024-07-09 2707/week @ 2024-07-16 4325/week @ 2024-07-23 3470/week @ 2024-07-30

14,335 每月下载量
用于 17 个包(3 个直接使用)

MIT 许可协议

115KB
2.5K SLoC

PURL 解析、操作和格式化。

PURL 是一个指向软件包的标识符。例如,pkg:cargo/purl 指代此包。

此库在两个级别上支持 PURL

  1. PURL 的形状和格式由 GenericPurl 实现。可以通过使用类型如 GenericPurl<String> 来处理与包类型无关的 PURL(也见 package-url/purl-spec#38)。
  2. 包类型的实现由 PackageType 和通过类型别名 PurlGenericPurl 结合实现。此实现与 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