#archive-format #file-format #electron #writer #asar #reader #parser

hive-asar

Electron 的 asar 归档格式的异步解析器和写入器

6 个版本 (3 个重大变更)

0.4.0 2022 年 7 月 19 日
0.3.2 2022 年 7 月 5 日
0.3.1 2022 年 6 月 22 日
0.2.0 2022 年 6 月 20 日
0.1.1 2022 年 6 月 8 日

#2073解析器实现


用于 abel

MIT 许可协议

35KB
834

hive-asar

Rust Crates.io Docs License

Electron 的 asar 归档格式的异步解析器和写入器。

需要 Tokio 1.x 运行时。

当前支持

  • 从文件或异步读取器解析归档
  • 从多个读取器打包归档,或方便地从文件夹中打包

当前不支持

  • 写入和检查完整性(计划中)
  • 解包文件(计划中)
  • 可执行文件(不计划,是否使用由您决定)

示例

读取

use hive_asar::{Archive, FileArchive};
use tokio::io::AsyncReadExt;

#[tokio::main]
async fn main() -> tokio::io::Result<()> {
  // Parses an asar archive from a file
  let mut file_archive = Archive::new_from_file("path/to/archive.asar").await?;

  // Gets the file, retrieving its metadata and reading the entire content
  let mut file = file_archive.read("path/to/file.txt").await?;
  let size = file.metadata().size;
  let mut buf = Vec::with_capacity(size as _);
  file.read_to_end(&mut buf).await?;

  Ok(())
}

写入

use hive_asar::{Writer, pack_dir};
use tokio::io::AsyncReadExt;
use tokio::fs::File;

#[tokio::main]
async fn main() -> tokio::io::Result<()> {
  let mut writer = Writer::new();

  // You can manually add all of the file one by one
  writer.add_sized("foo.txt", File::open("folder/foo.txt").await?).await?;
  writer.add_sized("bar.toml", File::open("folder/bar.toml").await?).await?;
  writer.add_sized("baaz.rs", File::open("folder/baaz.rs").await?).await?;
  writer.write(File::create("dest.asar").await?).await?;

  // Or use `pack_dir` to pack a directory's content conveniently
  pack_dir("folder", &mut File::create("dest.asar").await?).await?;

  Ok(())
}

功能

  • fs: (默认启用) 文件系统支持,例如 Archive::extractpack_dir
  • integrity: (默认启用) 在标题中启用 SHA256 哈希支持。使用 sha2 包。

许可协议

hive-asar 根据 MIT 许可协议授权。

依赖项

~3–5MB
~91K SLoC