68 lines
1.5 KiB
Markdown
68 lines
1.5 KiB
Markdown
Simple way to use [`include_bytes!`](https://doc.rust-lang.org/std/macro.include_bytes.html) for directories.
|
|
|
|
# Why
|
|
|
|
I wanted to include a directory for my microcontroller project, but none of the solutions I used before seems to work in a no_std environment.
|
|
|
|
# Example
|
|
|
|
You can embed files three ways.
|
|
|
|
## Bytes mode
|
|
|
|
```rust
|
|
use dir_embed::Embed;
|
|
|
|
#[derive(Embed)]
|
|
#[dir = "../web/static"] // Path is relativ to the current file
|
|
#[mode = "bytes"] // Is the default. Can be omitted.
|
|
pub struct Assets;
|
|
|
|
fn main(){
|
|
let file: &[u8] = Assets::get("css/style.css").expect("Can't find file");
|
|
|
|
let string = str::from_utf8(file).expect("Failed to parse file");
|
|
|
|
println!("{string}");
|
|
}
|
|
```
|
|
|
|
## Str mode
|
|
|
|
```rust
|
|
use dir_embed::Embed;
|
|
|
|
#[derive(Embed)]
|
|
#[dir = "../web/static"] // Path is relativ to the current file
|
|
#[mode = "str"]
|
|
pub struct Assets;
|
|
|
|
fn main(){
|
|
let file: &str = Assets::get("css/style.css").expect("Can't find file");
|
|
|
|
println!("{file}");
|
|
}
|
|
```
|
|
|
|
## Mime mode
|
|
Same as "Bytes mode" but also add the guessed mime type from [`mime_guess`](https://crates.io/crates/mime_guess).
|
|
Defaults to `application/octet-stream` for unknown types.
|
|
|
|
```rust
|
|
use dir_embed::Embed;
|
|
|
|
#[derive(Embed)]
|
|
#[dir = "../web/static"] // Path is relativ to the current file
|
|
#[mode = "mime"]
|
|
pub struct Assets;
|
|
|
|
fn main(){
|
|
let file: (&[u8],&str) = Assets::get("css/style.css").expect("Can't find file");
|
|
|
|
let string = str::from_utf8(file.0).expect("Failed to parse file");
|
|
|
|
println!("{string}");
|
|
println!("MIME: {file.1}"); // text/css
|
|
}
|
|
```
|