Skip to content
Snippets Groups Projects
mod.rs 1.24 KiB
Newer Older
Louis's avatar
Louis committed
//! Data embedded in the game for the sake of convenience. Future iterations
//! should load this info as assets, to make it easier to customise & reload

use std::collections::HashMap;

use lazy_static::lazy_static;
use serde::{Deserialize, Serialize};
Louis's avatar
Louis committed

use crate::world::{CraftSpecialism, TradeGood};

#[derive(Serialize, Deserialize)]
struct RawSpecialisms {
	specialism: Vec<CraftSpecialism>,
}
Louis's avatar
Louis committed

lazy_static! {
	pub static ref TRADE_GOODS: HashMap<String, TradeGood> =
		toml::from_slice(include_bytes!("../../../raw_assets/trade_goods.toml")).unwrap();
	pub static ref SPECIALISMS: Vec<CraftSpecialism> = {
		let initial: RawSpecialisms =
			toml::from_slice(include_bytes!("../../../raw_assets/specialisms.toml")).unwrap();
		initial.specialism
	};
Louis's avatar
Louis committed
}

/// Convert the name of a trade good into its representation.
/// Will panic if the name is incorrect; usually useful in a
/// static context
pub fn get_goods_from_name(name: impl ToString) -> TradeGood {
	(*TRADE_GOODS)[&name.to_string()].clone()
}
/// Convert the name of a trade good into its representation.
/// Preferred in a dynamic context where the `Option` can be checked
pub fn get_goods_from_name_checked(name: impl ToString) -> Option<TradeGood> {
	(*TRADE_GOODS).get(&name.to_string()).cloned()
}