use super::{
common::{RequiredTerrain, Yields},
enums::Specialist,
};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BuildingInfo {
pub name: String,
#[serde(default)]
pub is_national_wonder: bool,
#[serde(default)]
pub is_wonder: bool,
#[serde(flatten)]
pub yields: Yields,
#[serde(default)]
pub great_person_points: HashMap<String, u8>,
#[serde(default)]
pub specialist_slots: HashMap<Specialist, u8>,
#[serde(default)]
pub hurry_cost_modifier: u32,
#[serde(default)]
pub required_terrain: RequiredTerrain,
#[serde(default)]
#[serde(flatten)]
pub required_building: Option<RequiredBuilding>,
#[serde(default)]
pub required_tech: String,
#[serde(default)]
pub required_nearby_improved_resources: Vec<String>,
#[serde(default)]
pub maintenance: u32,
#[serde(default)]
pub replaces: String,
#[serde(default)]
pub unique_to: String,
#[serde(default)]
pub city_strength: u32,
#[serde(default)]
pub city_health: u32,
#[serde(default)]
pub cost: u32,
#[serde(default)]
pub percent_stat_bonus: HashMap<String, u8>,
#[serde(default)]
pub uniques: Vec<String>,
#[serde(default)]
pub quote: String,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum RequiredBuilding {
RequiredBuildingInCity(String),
RequiredBuildingInAllCities(String),
}