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 在 编码 中
每月下载量 43,776
在 4 crates 中使用
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