[go: up one dir, main page]

Crate include_packed

Crate include_packed 

Source
Expand description

Include large, compressed files in your binary without the high compile time cost.

This crate provides the include_packed! macro as an efficient alternative to std::include_bytes!. It combines the fast compile-time approach of include-blob with the binary size reduction of zstd compression.

§How It Works

Instead of embedding file contents directly into your source code, this crate processes files in a build script.

  1. Build Script: You use the [build::Config] builder in your build.rs script. For native targets, it reads your asset files, compresses them with zstd, and creates linkable object files.
  2. Macro Expansion: The include_packed! macro in your code expands to an expression that links to the compressed data (on native) or embeds the compressed data directly (on Wasm).
  3. Runtime: At runtime, the expression decompresses the data and returns it as a Vec<u8>. Decompression is performed on each call.

This method significantly reduces compile times for projects with large binary assets and keeps the final executable size smaller.

§Usage

  1. Add include_packed to your Cargo.toml. The build feature is required for build-dependencies.
[dependencies]
include_packed = "0.1.0"

[build-dependencies]
include_packed = { version = "0.1.0", features = ["build"] }
  1. Create a build.rs file in your project root to prepare the assets.
// build.rs
// This handles all platform-specific logic automatically.
include_packed::Config::new("assets")
  .level(10) // Set a custom zstd compression level (optional)
  .build()
  .expect("Failed to pack assets");
  1. Use the macro in your code to include an asset.
// src/main.rs
use include_packed::include_packed;

// This returns a Vec<u8> with the decompressed file content.
let data: Vec<u8> = include_packed!("assets/my_file.txt");
println!("Decompressed data is {} bytes long.", data.len());

Macros§

include_packed
Includes a large, compressed binary file without high compile-time costs.