1use crate::agent::AgentMap;
3use crate::commodity::{CommodityID, CommodityMap};
4use crate::process::ProcessMap;
5use crate::region::{Region, RegionID, RegionMap};
6use crate::time_slice::TimeSliceInfo;
7use std::collections::HashMap;
8use std::path::PathBuf;
9
10pub mod parameters;
11pub use parameters::{
12 ALLOW_BROKEN_OPTION_NAME, ModelParameters, PricingStrategy, broken_model_options_allowed,
13};
14
15pub struct Model {
17 pub model_path: PathBuf,
19 pub parameters: ModelParameters,
21 pub agents: AgentMap,
23 pub commodities: CommodityMap,
25 pub processes: ProcessMap,
27 pub time_slice_info: TimeSliceInfo,
29 pub regions: RegionMap,
31 pub commodity_order: HashMap<(RegionID, u32), Vec<CommodityID>>,
33}
34
35impl Model {
36 pub fn iter_years(&self) -> impl Iterator<Item = u32> + '_ {
38 self.parameters.milestone_years.iter().copied()
39 }
40
41 pub fn iter_regions(&self) -> indexmap::map::Keys<'_, RegionID, Region> {
43 self.regions.keys()
44 }
45}