Closed2

Rust でコンパイル時にアセットファイルを含めたい

PlatPlat

画像ファイルやJSONファイルなどをプロジェクトに含めておいて、実行時にそれを読み込みたいことがある。

そういうときは include_bytes! マクロを使うといいらしい。

https://doc.rust-lang.org/std/macro.include_bytes.html

このマクロを使うと、引数に渡したパスのファイルをバイト配列としてコンパイル時に実行ファイル内に保持してくれるようになる。

PlatPlat

今回は JSON ファイルを持っておきたかったので以下のようになった。

main.rs
use serde::{Deserialize, Serialize};
use serde_json;

const JSON_BYTES: &'static [u8] = include_bytes!("resources/data.json");

#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct Person {
    name: String
}

fn main() {
    let person: Person = serde_json::from_slice(JSON_BYTES).unwrap();
    println!("{:#?}", person);
}

プロジェクトフォルダはこんな感じになる:

├─src
│   ├─resources
│   │  └─data.json
│   └─main.rs
├─Cargo.toml
...
このスクラップは2023/11/26にクローズされました