Rust Embed for Web

Rust Macro which embeds files into your executable. A fork of rust-embed with a focus on usage on web servers.

Differences from rust-embed

This crate opts to make some choices that may increase the size of your executable in exchange for better performance at runtime. In particular:

These differences can be useful for web servers, with the caveat that it will increase executable size beyond what the original rust-embed does. If you are not building a web server, or the size of the executable is important to you, you should likely use the original project instead.

Installation

toml [dependencies] rust-embed-for-web="7.0"

Usage

To use this macro, add an empty struct, then add the derive. Then, you specify the folder to use.

```rust

[derive(RustEmbed)]

[folder = "examples/public/"]

struct Asset;

fn main() { let indexhtml = Asset::get("path/index.html").unwrap(); println!("{:?}", std::str::fromutf8(indexhtml.data.asref()));

for file in Asset::iter() { println!("{:?}", file.as_ref()); } } ```

The path resolution for the folder works as follows:

The prefix attribute

You can add #[prefix = "my_prefix/"] to the RustEmbed struct to add a prefix to all of the file paths. This prefix will be required on get calls, and will be included in the file paths returned by iter.

Features

debug-embed

Always embed the files in the binary, even in debug mode.

interpolate-folder-path

Allow environment variables to be used in the folder path. Example:

```rust

[derive(RustEmbed)]

[folder = "$CARGOMANIFESTDIR/foo"]

struct Asset; ```

This will pull the foo directory relative to your Cargo.toml file.

include-exclude

Filter files to be embedded with multiple #[include = "*.txt"] and #[exclude = "*.jpg"] attributes. Matching is done on relative file paths, via [globset]. exclude attributes have higher priority than include attributes. Example:

```rust

[derive(RustEmbed)]

[folder = "examples/public/"]

[include = "*.html"]

[include = "images/*"]

[exclude = "*.txt"]

struct Asset; ```

Usage

```rust use rustembedfor_web::RustEmbed;

[derive(RustEmbed)]

[folder = "examples/public/"]

[prefix = "prefix/"]

struct Asset;

fn main() { let indexhtml = Asset::get("prefix/index.html").unwrap(); println!("{:?}", std::str::fromutf8(indexhtml.data.asref()));

for file in Asset::iter() { println!("{}", file.as_ref()); } } ```