#tokio #bags #async #bag-it #rfc-8493

nightly async_bagit

创建和加载 BagIt 容器

2 个不稳定版本

0.2.0 2024 年 7 月 31 日
0.1.0 2024 年 7 月 20 日

#316算法

Download history 39/week @ 2024-07-14 73/week @ 2024-07-21 135/week @ 2024-07-28 5/week @ 2024-08-04

每月 252 次下载

MIT/Apache

130KB
1K SLoC

async_bagit

CI status crates.io version docs.rs

Rust 库,用于创建和读取 BagIt 容器。

在您的 crate 中使用的要求

  • Tokio 运行时
  • Nightly Rust,直到以下表格中显示的功能稳定,抱歉。在此期间,请随时提出补丁,以便在稳定版本上实现一些功能!
Nightly 功能 跟踪问题
iter_next_chunk #98326

使用 crate 的注意事项

校验和算法

BagIt 规范要求在包中的有效负载内容上使用校验和。虽然这个 crate 处理校验和并且可以计算文件的校验和,但这个 crate 不包括 任何校验和算法。我不想强迫 crate 消费者使用校验和 x 或 y,您将需要提供算法。

任何实现 digest crate 中的 Digest trait 的结构体都将被接受用于校验和计算。Rust 生态系统中的大多数算法已经实现了这个 trait。我不是专家,但截至本文撰写时(2024 年 7 月),我建议使用 BLAKE3BLAKE2SHA512,按此顺序。

不对文件进行特殊处理

对于打开包,该 crate 仅读取包含 BagIt 包的文件系统上的目录,压缩或加密超出了范围,您需要自行处理。

在创建包时,该 crate 在将文件添加到包时会 复制文件。在创建您的包时,请确保您有足够的存储空间和写入权限。

RFC 限制和怪癖

  • 仅支持 UTF-8。
  • 不支持多个校验和,一次只能使用一个。
  • RFC 在第 2.4 节中规定,bag 创建和验证工具 MUST 支持 SHA-256SHA-512 算法。这个 crate 要求您自带校验和算法,所以我想这个 crate 从来不会遵守 RFC 吧?
  • 校验和编码仅支持 小写
  • 这个包是为UNIX系统编写的,因此完全没有考虑Windows文件路径。此外,文件名的大小写也没有考虑。如果您觉得这是问题,请随意改进。

待办事项

  • fetch.txt:我还没有用到这个,似乎实现它需要很多工作
  • 同时支持多种校验和算法
  • 尊重有关文件名大小写的规范

我并不期望这个包完全符合RFC或处理BagIt包的其他工具(尽管我不反对,相反)。

我将使用BagIt创建这个包,并使用这个包打开它。

致谢

如果您正在寻找BagIt的同步Rust实现,那么https://github.com/pwinckles/bagr是一个不错的选择!

依赖项

~3.5–5.5MB
~97K SLoC