12 releases
0.5.7 | Jan 22, 2022 |
---|---|
0.5.5 | Jan 21, 2022 |
0.5.3 | Dec 5, 2019 |
0.5.1 | Nov 15, 2019 |
0.1.0 | Jan 30, 2019 |
#2933 in Rust patterns
Used in 2 crates
8KB
Packer
packer is a library that helps you pack static files into binaries using macro
magic. When you build in dev mode, it will fetch off your filesystem as usual,
but when you build with --release
, it will pack the assets into your binary!
Contact
Author: Michael Zhang, Nathan Ringo
License: MIT
lib.rs
:
packer is a library that helps you pack static files into binaries using macro magic. Here's how it's done:
Step 1: Include
Include the crate in your Cargo.toml
:
[dependencies]
packer = "0.5"
Step 2: Derive
Start deriving Packer
from your structs. You need to provide a source
attribute to indicate
the directory from which it should be pulling. Paths are relative to the crate root.
use packer::Packer;
#[derive(Packer)]
#[packer(source = "tests/basic")]
struct Assets;
Step 3: Use it!
You can now access any file using the get
function:
use packer::Packer;
let data: Option<&'static [u8]> = Assets::get("kermit.jpg");
You may also choose to list all the files that have been stored.
use packer::Packer;
let files /*: impl Iterator<Item = &'static str>*/ = Assets::list();
// Result (with no guarantee of order):
// files = ["tests/basic/first/kermit.jpg", "tests/basic/second/ignored.x", "tests/basic/second/LICENSE"]
(See the documentation for the Packer trait for the full listing of methods.)
When you build in dev mode, it will fetch off your filesystem as usual, but when you build with
--release
, it will pack the assets into your binary!
Ignoring Paths
You can choose to ignore certain paths using the ignore
option:
#[derive(Packer)]
#[packer(source = "tests/basic/second", ignore = "*.x")]
struct Assets;
// using BTreeSet since there's no guarantee of order
assert_eq!(Assets::list().into_iter().collect::<BTreeSet<_>>(),
vec!["tests/basic/second/LICENSE"].into_iter().collect::<BTreeSet<_>>());
Stripping the Prefix
By default, the path will keep the prefix. For example, if your file is located at static/index.html
relative to your project root, then the path that's in the packed version will also be static/index.html
.
If you would like it to instead be just index.html
, configure the prefixed
option as follows:
#[derive(Packer)]
#[packer(source = "tests/basic", prefixed = false)]
struct Assets;
By default, this option is set to true.
Dependencies
~1.6–9.5MB
~81K SLoC