#async #disk #back-end #facade #fs #floppy

floppy-disk

为 Rust 提供异步文件系统门面!

17 个版本

0.2.6 2023 年 7 月 19 日
0.2.5 2023 年 6 月 22 日
0.2.1 2023 年 5 月 30 日
0.1.8 2023 年 5 月 29 日
0.0.0 2023 年 3 月 16 日

#462文件系统

Download history 36/week @ 2024-03-13 124/week @ 2024-03-20 34/week @ 2024-03-27 27/week @ 2024-04-03 29/week @ 2024-04-10 53/week @ 2024-04-17 43/week @ 2024-04-24 29/week @ 2024-05-01 14/week @ 2024-05-08 7/week @ 2024-05-15 11/week @ 2024-05-22 10/week @ 2024-05-29 17/week @ 2024-06-05 19/week @ 2024-06-12 106/week @ 2024-06-19 49/week @ 2024-06-26

193 每月下载量
5 crates 中使用

MIT 许可证

51KB
1.5K SLoC

floppy-disk

floppy disk 是一个 WIP,仅支持异步的 Rust 文件系统门面。

是什么?

你曾经使用过 std::fstokio::fs 吗?那么你可能已经意识到测试文件系统代码很困难,有时甚至可怕。这是否意味着 fs::remove_dir_all 确实是安全的?

floppy disk 的目的是解决这个问题。不是总是使用真实的文件系统,floppy disk 允许您通过 FloppyDisk trait 选择文件系统访问的后端。当前的实现包括内存和通过 Tokio 的真实文件系统。这样,当您需要时可以使用真实文件系统,但测试时可以使用假的内存文件系统。

特性

  • 可插拔的文件系统后端
    • 内存(WIP)
    • Tokio
  • 使用 FloppyDisk trait 自定义
  • 完全异步
    • 轻度邪恶

注意事项

  • floppy disk 是 0.x.y 项目! 你可能不想在生产环境中使用它。
  • 仅异步!虽然有一些小的同步代码桥接,如 MemFile 实现 Read/Write/Seek,但这主要是为了更容易地与仅同步的外部库(例如 ar)一起工作。
  • 内存文件系统可能性能不足

示例用法

floppy disk 尝试 1:1 重现 std::fs API,但仅限于异步。

let fs = ...; // MemFloppyDisk::new() | TokioFloppyDisk::new()
fs.create_dir_all("/foo/bar").await?;
fs.write("/foo/bar/baz.txt", b"hello world").await?;
let contents = fs.read_to_string("/foo/bar/baz.txt").await?;
assert_eq!(contents, "hello world");

传递 FloppyDisk

struct MyStruct<'a, F: FloppyDisk<'a>> {
    fs: F,
    _marker: PhantomData<&'a ()>,
}

async fn my_fn<'a, F: FloppyDisk<'a>> {
   // ...
}

依赖项

~6–13MB
~143K SLoC