ck3_history_extractor/game_data/
mod.rs

1mod map;
2pub use map::{GameMap, MapGenerator, MapImage};
3
4mod localizer;
5use localizer::Localizer;
6pub use localizer::{LocalizationError, Localize};
7
8mod loader;
9pub use loader::GameDataLoader;
10use serde::Serialize;
11
12use super::types::{GameId, GameString, HashMap};
13
14#[derive(Serialize)]
15pub struct GameData {
16    map: Option<GameMap>,
17    localizer: Localizer,
18    title_province_map: HashMap<GameId, GameString>,
19}
20
21impl Localize<GameString> for GameData {
22    fn lookup<K: AsRef<str>>(&self, key: K) -> Option<GameString> {
23        self.localizer.lookup(key)
24    }
25
26    fn is_empty(&self) -> bool {
27        self.localizer.is_empty()
28    }
29}
30
31/// A trait that allows an object to be localized.
32pub trait Localizable {
33    /// Localizes the object.
34    fn localize(&mut self, localization: &GameData) -> Result<(), LocalizationError>;
35    // I really don't like how this takes in GameData, but alas
36
37    //TODO we should probably have a method here for simple queries, to allow some level of dynamic dispatch during localisation
38}
39
40impl GameData {
41    pub fn get_map(&self) -> Option<&GameMap> {
42        self.map.as_ref()
43    }
44
45    pub fn get_localizer(&self) -> &Localizer {
46        &self.localizer
47    }
48
49    pub fn lookup_title(&self, id: &GameId) -> Option<GameString> {
50        self.title_province_map.get(&id).cloned()
51    }
52}