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 在 文件系统
193 每月下载量
在 5 crates 中使用
51KB
1.5K SLoC
floppy-disk
floppy disk 是一个 WIP,仅支持异步的 Rust 文件系统门面。
是什么?
你曾经使用过 std::fs
或 tokio::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