13 个不稳定版本

0.7.0 2024年7月30日
0.6.1 2024年2月19日
0.6.0 2023年4月27日
0.5.2 2022年10月24日
0.1.0 2020年9月7日

121编码

Download history 9206/week @ 2024-04-28 9082/week @ 2024-05-05 10181/week @ 2024-05-12 9098/week @ 2024-05-19 8516/week @ 2024-05-26 9122/week @ 2024-06-02 10287/week @ 2024-06-09 10224/week @ 2024-06-16 9762/week @ 2024-06-23 11545/week @ 2024-06-30 10575/week @ 2024-07-07 10214/week @ 2024-07-14 12286/week @ 2024-07-21 11126/week @ 2024-07-28 10326/week @ 2024-08-04 9237/week @ 2024-08-11

每月下载量 43,776
4 crates 中使用

MIT/Apache

27KB
405

解析和序列化由 cargo auditable 编码的 JSON 依赖树。

此 crate 定义了序列化和反序列化到/从 JSON 的数据结构,并通过 serde 实现序列化和反序列化例程。它还提供了从 cargo metadata 和到 Cargo.lock 格式的可选转换。

VersionInfo 结构是所有魔法发生的地方,请参阅该结构的文档以获取更多信息。

基本用法

注意:这是一个低级 crate,仅实现 JSON 解析。很少直接使用。您可能希望使用更高级的 auditable-info crate。

以下代码片段演示了使用此 crate 的完整提取管道,包括通过 auditable-extract 处理平台特定的可执行文件以及使用安全的 Rust miniz_oxide 解压缩

use std::io::{Read, BufReader};
use std::{error::Error, fs::File, str::FromStr};

fn main() -> Result<(), Box<dyn Error>> {
    // Read the input
    let f = File::open("target/release/hello-world")?;
    let mut f = BufReader::new(f);
    let mut input_binary = Vec::new();
    f.read_to_end(&mut input_binary)?;
    // Extract the compressed audit data
    let compressed_audit_data = auditable_extract::raw_auditable_data(&input_binary)?;
    // Decompress it with your Zlib implementation of choice. We recommend miniz_oxide
    use miniz_oxide::inflate::decompress_to_vec_zlib;
    let decompressed_data = decompress_to_vec_zlib(&compressed_audit_data)
        .map_err(|_| "Failed to decompress audit data")?;
    let decompressed_data = String::from_utf8(decompressed_data)?;
    println!("{}", decompressed_data);
    // Parse the audit data to Rust data structures
    let dependency_tree = auditable_serde::VersionInfo::from_str(&decompressed_data);
    Ok(())
}

依赖项

~0.8–1.8MB
~38K SLoC