floppy-disk

floppy disk is a WIP, async-only filesystem facade for Rust.

What?

Have you ever worked with std::fs? tokio::fs? Then you've probably realised that testing filesystem code is difficult and sometimes scary. Is that fs::remove_dir_all really safe to run?

The point of floppy disk is to fix this. Rather than always using the real filesystem, floppy disk lets you choose a backend for your filesystem access, via the FloppyDisk trait. Current implementations include in-memory and real filesystem via Tokio. This way, you can use the real filesystem when you need, but have your tests hit a fake in-memory filesystem instead.

Features

Caveats

Example usage

floppy disk attempts to recreate the std::fs API 1:1, with the caveat of being async-only.

rust 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");

Passing a FloppyDisk around:

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

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