#directory #embed #macro

anydir

A crate for working with both compile-time embedded directories and runtime directories using an abstraction

9 releases

new 0.1.21 May 13, 2025
0.1.15 May 13, 2025

#448 in Filesystem

Download history

244 downloads per month

MIT license

9KB
177 lines

anydir

A Rust library that provides a unified interface for working with both compile-time embedded directories and runtime directories.

Crates.io

Motivation

It frustrated me that no Rust library had an abstracted Dir type that allowed for both embedded compile-time directories and runtime directories, so I made one.

If you know of such a library, please let me know !

Installation

Add this to your Cargo.toml:

[dependencies]
anydir = "0.1.0"

Usage

use anydir::anydir;

fn main() {
    // Embed files at compile time - bundled directly in your binary
    let ct_dir = anydir!(ct, "$CARGO_MANIFEST_DIR");
    let ct_files = ct_dir.files();
    println!("Compile-time files: {:?}", ct_files);

    // Access files at runtime from the filesystem
    let rt_dir = anydir!(rt, "./");
    let rt_files = rt_dir.files();
    println!("Runtime files: {:?}", rt_files);
}

Features

  • Compile-time embedding: Bundle directory contents directly in your binary
  • Runtime access: Load directories from the filesystem at runtime
  • Unified API: Work with both types using the same interface
  • Zero-cost abstraction: No runtime overhead for compile-time directories
  • Simple macros: Easy-to-use macro interface

API

Macros

  • anydir!(ct, path) - Create a compile-time embedded directory
  • anydir!(rt, path) - Create a runtime directory reference

Traits

  • DirOps - Common operations for directories
    • files() - Returns a vector of filenames in the directory

Dependencies

~250–700KB
~17K SLoC