## fskit

Useful abstractions for building sans-io filesystems on top of the [vfs](https://crates.io/crates/vfs) crate.

These abstractions were born out of developing [`enfusion_pak`](https://github.com/landaire/enfusion_tools) and [`wows-toolkit`](https://github.com/landaire/wows-toolkit).

In both of these applications I created a sans-io filesystem parser which performed the low-level understanding of the filesystem itself, and abstracted its access using `vfs`.

Instead of copying/pasting the traits and common patterns around, `fskit` provides the abstractions that were useful across both crates.

## tl;dr

1. `VfsEntry` abstraction for building proper filesystem trees with knowledge of what a file/directory is, directory children, and the entry's metadata.
2. `VfsTree`, which (at the time of writing) implements a a flat "tree" over the filesystem's full path. 
3. A `ReadAt` and `AsyncReadAt` trait, implemented by you, which receives read context suitable for implementors to figure out how to read the described file's range.
4. `ReadOnlyVfs<F, O>`, implementing the standard read-only `vfs` functions over the above.

Together the above allow you to focus on the details of reading the filesystem, implement a few traits, build the tree, and you now have a working VFS.
