Embed Files in a Rust Binary
NOTE: There's a version of this in the rust-grimoire.
---
[dependencies]
anyhow = "1.0.98"
rust-embed = "8.7"
---
#![allow(unused)]
use anyhow::Result;
use rust_embed::RustEmbed;
use std::fs::File;
use std::path::PathBuf;
use std::io::prelude::*;
#[derive(RustEmbed)]
#[folder = "rust_embed_test/input"]
struct FilePayload;
fn main() -> Result<()> {
extra_files()?;
Ok(())
}
fn extra_files() -> Result<()> {
let output_root = PathBuf::from("test_output");
for file in FilePayload::iter() {
let name = file.as_ref();
println!("Extracting: {}", name);
let output_path = output_root.join(name);
if let Some(content) = FilePayload::get(name) {
if let Some(parent) = output_path.parent() {
if !parent.exists() {
std::fs::create_dir_all(parent)?
}
}
let body: Vec<u8> = content.data.into();
let mut output = File::create(output_path)?;
output.write_all(&body)?;
}
}
Ok(())
}
Extracting: alfa.txt
Extracting: pixel-alfa.png
Extracting: sub-dir/bravo.txt
Extracting: sub-dir/pixel-bravo.png
Extracting: sub-dir/sub-sub-dir/charlie.txt
Extracting: sub-dir/sub-sub-dir/pixel-charlie.png