#cargo-metadata #cargo-toml #graph #cargo #metadata

krates

根据 cargo 元数据创建 crate 图表

41 个版本

0.17.1 2024 年 8 月 2 日
0.17.0 2024 年 6 月 26 日
0.16.10 2024 年 4 月 12 日
0.16.7 2024 年 3 月 20 日
0.2.0 2020 年 2 月 5 日

10可视化

Download history 15777/week @ 2024-05-02 12924/week @ 2024-05-09 12871/week @ 2024-05-16 13603/week @ 2024-05-23 14136/week @ 2024-05-30 13430/week @ 2024-06-06 19290/week @ 2024-06-13 16105/week @ 2024-06-20 13979/week @ 2024-06-27 12412/week @ 2024-07-04 11727/week @ 2024-07-11 13680/week @ 2024-07-18 15698/week @ 2024-07-25 15903/week @ 2024-08-01 15951/week @ 2024-08-08 12497/week @ 2024-08-15

每月 62,387 次下载
用于 9 crate(6 个直接使用)

MIT/Apache

160KB
3K SLoC

📦 krates

Embark Embark Crates.io Docs dependency status Build Status

cargo_metadata 元数据创建 crate 图表。

使用方法

use krates::{Builder, Cmd, Krates, cm, petgraph};
fn main() -> Result<(), krates::Error> {
    let mut cmd = Cmd::new();
    cmd.manifest_path("path/to/a/Cargo.toml");
    // Enable all features, works for either an entire workspace or a single crate
    cmd.all_features();

    let mut builder = Builder::new();
    // Let's filter out any crates that aren't used by x86_64 windows
    builder.include_targets(std::iter::once(("x86_64-pc-windows-msvc", vec![])));

    let krates: Krates = builder.build(cmd, |pkg: cm::Package| {
        println!("Crate {} was filtered out", pkg.id);
    })?;

    // Print a dot graph of the entire crate graph
    println!("{:?}", petgraph::dot::Dot::new(krates.graph()));

    Ok(())
}

krates 也可以在将 cargo 作为依赖项使用时使用。它不依赖于 cargo 本身,因为 cargo 发展迅速,我们不希望人为地限制您使用的版本,但至少在当前的稳定 cargo crate 中,以下代码运行良好。

fn get_metadata(
    no_default_features: bool,
    all_features: bool,
    features: Vec<String>,
    manifest_path: PathBuf,
) -> Result<krates::cm::Metadata, anyhow::Error> {
    let config = cargo::util::Config::default()?;
    let ws = cargo::core::Workspace::new(&manifest_path, &config)?;
    let options = cargo::ops::OutputMetadataOptions {
        features,
        no_default_features,
        all_features,
        no_deps: false,
        version: 1,
        filter_platforms: vec![],
    };

    let md = cargo::ops::output_metadata(&ws, &options)?;
    let md_value = serde_json::to_value(md)?;

    Ok(serde_json::from_value(md_value)?)
}

贡献

Contributor Covenant

我们欢迎社区对该项目的贡献。

请参阅我们的 贡献指南 了解如何开始。

许可证

根据以下任一许可证授权:

供您选择。

贡献

除非您明确声明,否则您有意提交给作品并包含在内的任何贡献,根据 Apache-2.0 许可证的定义,应如上所述双重许可,不附加任何额外条款或条件。

依赖项

~3–4MB
~74K SLoC