Skip to main content

supreme_replay_analyzer/
level_data.rs

1use crate::models::{Level, LevelDataEntry};
2use include_json::include_json;
3use std::collections::HashMap;
4use std::sync::OnceLock;
5
6static LEVELS: OnceLock<Vec<Level>> = OnceLock::new();
7
8pub fn get_levels() -> &'static Vec<Level> {
9    LEVELS.get_or_init(|| {
10        let level_data = include_json!(concat!(
11            env!("CARGO_MANIFEST_DIR"),
12            "/src/data/levelData.json"
13        ));
14        let level_map: HashMap<String, Vec<LevelDataEntry>> = serde_json::from_value(level_data)
15            .expect("Failed to deserialize to HashMap<String, Vec<LevelDataEntry>>");
16
17        level_map
18            .into_iter()
19            .map(|(name, entries)| Level { name, entries })
20            .collect()
21    })
22}