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 • Rust 包仓库 2265/week @ 2024-04-16 • Rust 包仓库 2690/week @ 2024-04-23 • Rust 包仓库 2416/week @ 2024-04-30 • Rust 包仓库 2090/week @ 2024-05-07 • Rust 包仓库 2600/week @ 2024-05-14 • Rust 包仓库 2805/week @ 2024-05-21 • Rust 包仓库 2752/week @ 2024-05-28 • Rust 包仓库 2659/week @ 2024-06-04 • Rust 包仓库 2281/week @ 2024-06-11 • Rust 包仓库 2469/week @ 2024-06-18 • Rust 包仓库 1994/week @ 2024-06-25 • Rust 包仓库 4450/week @ 2024-07-02 • Rust 包仓库 3199/week @ 2024-07-09 • Rust 包仓库 2707/week @ 2024-07-16 • Rust 包仓库 4325/week @ 2024-07-23 • Rust 包仓库 3470/week @ 2024-07-30 • Rust 包仓库

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/example@1.2.3?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/example@1.2.3?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