Skip to content
This repository was archived by the owner on Apr 18, 2025. It is now read-only.

lib: re-export RustEmbed as Embed #245

Merged
merged 2 commits into from
May 11, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions examples/actix.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use actix_web::{web, App, HttpResponse, HttpServer, Responder};
use mime_guess::from_path;
use rust_embed::RustEmbed;
use rust_embed::Embed;

#[derive(RustEmbed)]
#[derive(Embed)]
#[folder = "examples/public/"]
struct Asset;

4 changes: 2 additions & 2 deletions examples/axum-spa/main.rs
Original file line number Diff line number Diff line change
@@ -3,12 +3,12 @@ use axum::{
response::{Html, IntoResponse, Response},
routing::Router,
};
use rust_embed::RustEmbed;
use rust_embed::Embed;
use std::net::SocketAddr;

static INDEX_HTML: &str = "index.html";

#[derive(RustEmbed)]
#[derive(Embed)]
#[folder = "examples/axum-spa/assets/"]
struct Assets;

4 changes: 2 additions & 2 deletions examples/axum.rs
Original file line number Diff line number Diff line change
@@ -3,7 +3,7 @@ use axum::{
response::{Html, IntoResponse, Response},
routing::{get, Router},
};
use rust_embed::RustEmbed;
use rust_embed::Embed;
use std::net::SocketAddr;

#[tokio::main]
@@ -46,7 +46,7 @@ async fn not_found() -> Html<&'static str> {
Html("<h1>404</h1><p>Not Found</p>")
}

#[derive(RustEmbed)]
#[derive(Embed)]
#[folder = "examples/public/"]
struct Asset;

4 changes: 2 additions & 2 deletions examples/basic.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use rust_embed::RustEmbed;
use rust_embed::Embed;

#[derive(RustEmbed)]
#[derive(Embed)]
#[folder = "examples/public/"]
struct Asset;

2 changes: 1 addition & 1 deletion examples/poem.rs
Original file line number Diff line number Diff line change
@@ -14,7 +14,7 @@ async fn main() -> Result<(), std::io::Error> {
Ok(())
}

#[derive(rust_embed::RustEmbed)]
#[derive(rust_embed::Embed)]
#[folder = "examples/public/"]
struct Asset;
pub(crate) struct StaticEmbed;
4 changes: 2 additions & 2 deletions examples/rocket.rs
Original file line number Diff line number Diff line change
@@ -3,13 +3,13 @@ extern crate rocket;

use rocket::http::ContentType;
use rocket::response::content::RawHtml;
use rust_embed::RustEmbed;
use rust_embed::Embed;

use std::borrow::Cow;
use std::ffi::OsStr;
use std::path::PathBuf;

#[derive(RustEmbed)]
#[derive(Embed)]
#[folder = "examples/public/"]
struct Asset;

2 changes: 1 addition & 1 deletion examples/salvo.rs
Original file line number Diff line number Diff line change
@@ -12,7 +12,7 @@ async fn main() -> Result<(), std::io::Error> {
Ok(())
}

#[derive(rust_embed::RustEmbed)]
#[derive(rust_embed::Embed)]
#[folder = "examples/public/"]
struct Asset;

4 changes: 2 additions & 2 deletions examples/warp.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use rust_embed::RustEmbed;
use rust_embed::Embed;
use warp::{http::header::HeaderValue, path::Tail, reply::Response, Filter, Rejection, Reply};

#[derive(RustEmbed)]
#[derive(Embed)]
#[folder = "examples/public/"]
struct Asset;

12 changes: 7 additions & 5 deletions readme.md
Original file line number Diff line number Diff line change
@@ -21,7 +21,7 @@ The path resolution works as follows:
- In `release` or when `debug-embed` feature is enabled, the folder path is resolved relative to where `Cargo.toml` is.

```rust
#[derive(RustEmbed)]
#[derive(Embed)]
#[folder = "examples/public/"]
struct Asset;
```
@@ -98,7 +98,7 @@ Always embed the files in the binary, even in debug mode.
Allow environment variables to be used in the `folder` path. Example:

```rust
#[derive(RustEmbed)]
#[derive(Embed)]
#[folder = "$CARGO_MANIFEST_DIR/foo"]
struct Asset;
```
@@ -116,7 +116,9 @@ Matching is done on relative file paths, via [`globset`].
Example:

```rust
#[derive(RustEmbed)]
use rust_embed::Embed;

#[derive(Embed)]
#[folder = "examples/public/"]
#[include = "*.html"]
#[include = "images/*"]
@@ -127,9 +129,9 @@ struct Asset;
## Usage

```rust
use rust_embed::RustEmbed;
use rust_embed::Embed;

#[derive(RustEmbed)]
#[derive(Embed)]
#[folder = "examples/public/"]
#[prefix = "prefix/"]
struct Asset;
4 changes: 0 additions & 4 deletions rustfmt.toml
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
unstable_features = false
wrap_comments = true
normalize_comments = true
merge_derives = true
fn_params_layout = "Compressed"
max_width = 160
tab_spaces = 2
indent_style = "Block"
reorder_imports = true
6 changes: 4 additions & 2 deletions src/lib.rs
Original file line number Diff line number Diff line change
@@ -21,9 +21,9 @@ pub extern crate rust_embed_utils as utils;
///
/// This trait is meant to be derived like so:
/// ```
/// use rust_embed::RustEmbed;
/// use rust_embed::Embed;
///
/// #[derive(RustEmbed)]
/// #[derive(Embed)]
/// #[folder = "examples/public/"]
/// struct Asset;
///
@@ -50,6 +50,8 @@ pub trait RustEmbed {
fn iter() -> Filenames;
}

pub use RustEmbed as Embed;

/// An iterator over filenames.
///
/// This enum exists for optimization purposes, to avoid boxing the iterator in
12 changes: 6 additions & 6 deletions tests/include_exclude.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use rust_embed::RustEmbed;
use rust_embed::Embed;

#[derive(RustEmbed)]
#[derive(Embed)]
#[folder = "examples/public/"]
struct AllAssets;

@@ -13,7 +13,7 @@ fn get_works() {
assert_eq!(AllAssets::iter().count(), 7);
}

#[derive(RustEmbed)]
#[derive(Embed)]
#[folder = "examples/public/"]
#[include = "*.html"]
#[include = "images/*"]
@@ -27,7 +27,7 @@ fn including_some_assets_works() {
assert_eq!(IncludeSomeAssets::iter().count(), 4);
}

#[derive(RustEmbed)]
#[derive(Embed)]
#[folder = "examples/public/"]
#[exclude = "*.html"]
#[exclude = "images/*"]
@@ -42,7 +42,7 @@ fn excluding_some_assets_works() {
assert_eq!(ExcludeSomeAssets::iter().count(), 3);
}

#[derive(RustEmbed)]
#[derive(Embed)]
#[folder = "examples/public/"]
#[include = "images/*"]
#[exclude = "*.txt"]
@@ -55,7 +55,7 @@ fn exclude_has_higher_priority() {
assert_eq!(ExcludePriorityAssets::iter().count(), 2);
}

#[derive(RustEmbed)]
#[derive(Embed)]
#[folder = "examples/public/symlinks"]
#[include = "main.js"]
struct IncludeSymlink;
6 changes: 3 additions & 3 deletions tests/interpolated_path.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use rust_embed::RustEmbed;
use rust_embed::Embed;

/// Test doc comment
#[derive(RustEmbed)]
#[derive(Embed)]
#[folder = "$CARGO_MANIFEST_DIR/examples/public/"]
struct Asset;

@@ -26,7 +26,7 @@ fn iter_works() {
fn trait_works_generic() {
trait_works_generic_helper::<Asset>();
}
fn trait_works_generic_helper<E: rust_embed::RustEmbed>() {
fn trait_works_generic_helper<E: rust_embed::Embed>() {
let mut num_files = 0;
for file in E::iter() {
assert!(E::get(file.as_ref()).is_some());
18 changes: 15 additions & 3 deletions tests/lib.rs
Original file line number Diff line number Diff line change
@@ -1,17 +1,29 @@
use rust_embed::RustEmbed;
use rust_embed::{Embed, RustEmbed};

/// Test doc comment
#[derive(RustEmbed)]
#[derive(Embed)]
#[folder = "examples/public/"]
struct Asset;

#[derive(RustEmbed)]
#[folder = "examples/public/"]
struct AssetOld;

#[test]
fn get_works() {
assert!(Asset::get("index.html").is_some(), "index.html should exist");
assert!(Asset::get("gg.html").is_none(), "gg.html should not exist");
assert!(Asset::get("images/llama.png").is_some(), "llama.png should exist");
}

// Todo remove this test and rename RustEmbed trait to Embed on a new major release
#[test]
fn get_old_name_works() {
assert!(AssetOld::get("index.html").is_some(), "index.html should exist");
assert!(AssetOld::get("gg.html").is_none(), "gg.html should not exist");
assert!(AssetOld::get("images/llama.png").is_some(), "llama.png should exist");
}

/// Using Windows-style path separators (`\`) is acceptable
#[test]
fn get_windows_style() {
@@ -35,7 +47,7 @@ fn iter_works() {
fn trait_works_generic() {
trait_works_generic_helper::<Asset>();
}
fn trait_works_generic_helper<E: rust_embed::RustEmbed>() {
fn trait_works_generic_helper<E: rust_embed::Embed>() {
let mut num_files = 0;
for file in E::iter() {
assert!(E::get(file.as_ref()).is_some());
4 changes: 2 additions & 2 deletions tests/metadata.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use rust_embed::{EmbeddedFile, RustEmbed};
use rust_embed::{Embed, EmbeddedFile};
use sha2::Digest;
use std::{fs, time::SystemTime};

#[derive(RustEmbed)]
#[derive(Embed)]
#[folder = "examples/public/"]
struct Asset;

4 changes: 2 additions & 2 deletions tests/metadata_only.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use rust_embed::{EmbeddedFile, RustEmbed};
use rust_embed::{Embed, EmbeddedFile};

#[derive(RustEmbed)]
#[derive(Embed)]
#[folder = "examples/public/"]
#[metadata_only = true]
struct Asset;
4 changes: 2 additions & 2 deletions tests/mime_guess.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use rust_embed::{EmbeddedFile, RustEmbed};
use rust_embed::{Embed, EmbeddedFile};

#[derive(RustEmbed)]
#[derive(Embed)]
#[folder = "examples/public/"]
struct Asset;

6 changes: 3 additions & 3 deletions tests/path_traversal_attack.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use rust_embed::RustEmbed;
use rust_embed::Embed;

#[derive(RustEmbed)]
#[derive(Embed)]
#[folder = "examples/public/"]
struct Assets;

@@ -12,7 +12,7 @@ fn path_traversal_attack_fails() {
assert!(Assets::get("../basic.rs").is_none());
}

#[derive(RustEmbed)]
#[derive(Embed)]
#[folder = "examples/axum-spa/"]
struct AxumAssets;

4 changes: 2 additions & 2 deletions tests/prefix.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use rust_embed::RustEmbed;
use rust_embed::Embed;

#[derive(RustEmbed)]
#[derive(Embed)]
#[folder = "examples/public/"]
#[prefix = "prefix/"]
struct Asset;