use crate::agent::AgentMap;
use crate::asset::AssetRef;
use crate::commodity::{CommodityID, CommodityMap};
use crate::process::ProcessMap;
use crate::region::{Region, RegionID, RegionMap};
use crate::simulation::investment::InvestmentSet;
use crate::time_slice::TimeSliceInfo;
use std::collections::HashMap;
use std::path::PathBuf;
pub mod parameters;
pub use parameters::{
ALLOW_DANGEROUS_OPTION_NAME, ModelParameters, dangerous_model_options_enabled,
};
pub struct Model {
pub model_path: PathBuf,
pub parameters: ModelParameters,
pub agents: AgentMap,
pub commodities: CommodityMap,
pub processes: ProcessMap,
pub time_slice_info: TimeSliceInfo,
pub regions: RegionMap,
pub user_assets: Vec<AssetRef>,
pub investment_order: HashMap<u32, Vec<InvestmentSet>>,
}
impl Model {
pub fn iter_years(&self) -> impl Iterator<Item = u32> + '_ {
self.parameters.milestone_years.iter().copied()
}
pub fn iter_regions(&self) -> indexmap::map::Keys<'_, RegionID, Region> {
self.regions.keys()
}
pub fn iter_markets(&self) -> impl Iterator<Item = (CommodityID, RegionID)> + '_ {
self.commodities.keys().flat_map(move |commodity_id| {
self.regions
.keys()
.map(move |region_id| (commodity_id.clone(), region_id.clone()))
})
}
}