sct_reader/package/
facility.rs1use std::collections::HashMap;
2use std::path::Display;
3use anyhow::anyhow;
4use serde::{Deserialize, Serialize};
5use crate::loaders::vnas_crc::CrcVideoMapRef;
6use crate::loaders::vnas_crc::facility::CrcFacility;
7use super::display::AtcDisplay;
8use super::position::AtcPosition;
9
10#[derive(Debug, Clone, Default, Serialize, Deserialize)]
11pub struct AtcFacility {
12 pub name: String,
13 pub displays: Vec<AtcDisplay>,
14 pub child_facilities: Vec<AtcFacility>,
15 pub positions: Vec<AtcPosition>
16}
17
18impl AtcFacility {
19 pub fn try_from_crc(value: &CrcFacility, maps: &HashMap<String, CrcVideoMapRef>) -> anyhow::Result<Self> {
20 let mut children = Vec::new();
21
22 for child in &value.child_facilities {
24 children.push(AtcFacility::try_from_crc(child, &maps)?);
25 }
26
27 let mut displays = Vec::new();
29
30 if let Some(stars_cfg) = &value.stars_configuration {
31 displays.append(&mut AtcDisplay::from_crc_stars(stars_cfg, &maps));
32 }
33
34 if let Some(eram_cfg) = &value.eram_configuration {
35 displays.append(&mut AtcDisplay::from_crc_eram(eram_cfg, &maps));
36 }
37
38 if let Some(asdex_cfg) = &value.asdex_configuration {
39 displays.push(AtcDisplay::from_crc_twr_asdex("asdex-day".to_string(), "ASDE-X (Day)".to_string(), asdex_cfg));
40 displays.push(AtcDisplay::from_crc_twr_asdex("asdex-night".to_string(), "ASDE-X (Night)".to_string(), asdex_cfg));
41 }
42 if let Some(twr_cfg) = &value.tower_cab_configuration {
43 displays.push(AtcDisplay::from_crc_twr_asdex("twrcab".to_string(), "Tower Cab".to_string(), twr_cfg));
44 }
45
46 Ok(Self {
47 name: value.name.to_string(),
48 child_facilities: children,
49 displays: displays,
50 positions: Vec::new()
51 })
52 }
53}