6 个版本 (3 个重大变更)
0.4.0 | 2022 年 7 月 19 日 |
---|---|
0.3.2 | 2022 年 7 月 5 日 |
0.3.1 |
|
0.2.0 | 2022 年 6 月 20 日 |
0.1.1 | 2022 年 6 月 8 日 |
#2073 在 解析器实现
用于 abel
35KB
834 行
hive-asar
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::extract
和pack_dir
。integrity
: (默认启用) 在标题中启用 SHA256 哈希支持。使用sha2
包。
许可协议
hive-asar
根据 MIT 许可协议授权。
依赖项
~3–5MB
~91K SLoC