Skip to content

Commit 44cea48

Browse files
committed
Add function to retrieve children nodes by path
1 parent 3bd6c0a commit 44cea48

2 files changed

Lines changed: 270 additions & 19 deletions

File tree

rust/build.rs

Lines changed: 57 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,26 @@ mod r#static {
33
use serde_json::Value;
44
use std::{fs, io, path::Path};
55

6-
fn dir_tree_to_list(dir: impl AsRef<Path>) -> (String, String) {
6+
fn dir_tree_to_list(dir: impl AsRef<Path>) -> (String, String, String) {
77
let info_path = dir.as_ref().join("info.json");
8-
let info_dot_json = match info_path.exists() {
8+
let node_dir = match info_path.exists() {
99
true => {
1010
let info = fs::read_to_string(&info_path).unwrap();
1111
let info: Value = serde_json::from_str(info.as_str()).unwrap();
1212
let mut info = info.as_object().unwrap().clone();
1313
info.remove("$schema");
14-
Some(Value::Object(info))
14+
15+
let path = dir.as_ref().display().to_string();
16+
Some((
17+
path.split("_data/").last().unwrap_or(&path).to_string(),
18+
Value::Object(info),
19+
))
1520
}
1621
false => None,
1722
};
18-
let this_node = match &info_dot_json {
19-
Some(info) => {
23+
24+
let this_node = match &node_dir {
25+
Some((_, info)) => {
2026
let path = dir.as_ref().display().to_string();
2127
let path = path.split("_data/").last().unwrap_or(&path);
2228

@@ -50,7 +56,7 @@ mod r#static {
5056

5157
match ty.as_str() {
5258
"Specialty" | "Sector" => format!(
53-
r#"NodeType::{}{{
59+
r#"NodeType::{} {{
5460
terms: NodeTerms {{
5561
per_year: 2,
5662
slots: &[7, 8, 9, 10],
@@ -69,10 +75,8 @@ mod r#static {
6975
None => String::new(),
7076
};
7177

72-
let this_match = match &info_dot_json {
73-
Some(_) => {
74-
let path = dir.as_ref().display().to_string();
75-
let path = path.split("_data/").last().unwrap_or(&path);
78+
let this_match = match &node_dir {
79+
Some((path, _)) => {
7680
format!(
7781
" \"{}\" => Some(&{}),\n",
7882
path,
@@ -83,12 +87,22 @@ mod r#static {
8387
};
8488

8589
let sub_dirs = fs::read_dir(&dir).unwrap();
86-
let mut children: Vec<(String, String)> = sub_dirs
90+
let mut children_names = Vec::new();
91+
let mut children: Vec<(String, String, String)> = sub_dirs
8792
.filter_map(|entry| {
8893
let entry = entry.unwrap();
8994
let ty = entry.file_type().unwrap();
9095
if ty.is_dir() {
91-
Some(dir_tree_to_list(entry.path()))
96+
let path = entry.path();
97+
children_names.push(
98+
path.display()
99+
.to_string()
100+
.split("_data/")
101+
.last()
102+
.map(|s| s.replace('/', "_").to_uppercase())
103+
.unwrap(),
104+
);
105+
Some(dir_tree_to_list(path))
92106
} else {
93107
None
94108
}
@@ -97,16 +111,35 @@ mod r#static {
97111
// to ensure deterministic output on different platforms
98112
children.sort();
99113

114+
let this_children_match = match &node_dir {
115+
Some((path, _)) => {
116+
format!(
117+
r#" "{}" => vec![{}],
118+
"#,
119+
path,
120+
children_names
121+
.iter()
122+
.map(|name| format!("&{}", name))
123+
.collect::<Vec<String>>()
124+
.join(", ")
125+
)
126+
}
127+
None => String::new(),
128+
};
129+
100130
let mut constants = String::new();
101131
let mut matches = String::new();
102-
for (c, m) in children {
103-
constants.push_str(&c);
104-
matches.push_str(&m);
132+
let mut children_matches = String::new();
133+
for (c, m, chm) in &children {
134+
constants.push_str(c);
135+
matches.push_str(m);
136+
children_matches.push_str(chm);
105137
}
106138

107139
(
108140
format!("{}{}", this_node, constants),
109141
format!("{}{}", this_match, matches),
142+
format!("{}{}", this_children_match, children_matches),
110143
)
111144
}
112145

@@ -123,8 +156,15 @@ pub fn get_node_by_path(path: &str) -> Option<&Node> {{
123156
match path {{
124157
{} _ => None,
125158
}}
126-
}}"##,
127-
string_tree.0, string_tree.1
159+
}}
160+
161+
pub fn get_children_by_path(path: &str) -> Vec<&Node> {{
162+
match path {{
163+
{} _ => vec![],
164+
}}
165+
}}
166+
"##,
167+
string_tree.0, string_tree.1, string_tree.2
128168
);
129169
fs::create_dir_all("./src/static/_auto_generated")?;
130170
fs::write("./src/static/_auto_generated/data.rs", data)?;

rust/src/static/_auto_generated/data.rs

Lines changed: 213 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,7 +1008,7 @@ const UMKB_FST_DEE_SEC: Node = Node {
10081008
ar: "تخصص التحكم الكهربائي",
10091009
fr: "Spécialité de commande électrique",
10101010
},
1011-
r#type: NodeType::Specialty{
1011+
r#type: NodeType::Specialty {
10121012
terms: NodeTerms {
10131013
per_year: 2,
10141014
slots: &[7, 8, 9, 10],
@@ -1857,4 +1857,215 @@ pub fn get_node_by_path(path: &str) -> Option<&Node> {
18571857
"usto/ista" => Some(&USTO_ISTA),
18581858
_ => None,
18591859
}
1860-
}
1860+
}
1861+
1862+
pub fn get_children_by_path(path: &str) -> Vec<&Node> {
1863+
match path {
1864+
"ua2aks" => vec![&UA2AKS_FLE, &UA2AKS_IT, &UA2AKS_IA, &UA2AKS_FSS, &UA2AKS_FSH, &UA2AKS_FALAOL],
1865+
"ua2aks/falaol" => vec![&UA2AKS_FALAOL_DTS, &UA2AKS_FALAOL_DART, &UA2AKS_FALAOL_DTRL, &UA2AKS_FALAOL_DALA],
1866+
"ua2aks/falaol/dala" => vec![],
1867+
"ua2aks/falaol/dart" => vec![],
1868+
"ua2aks/falaol/dtrl" => vec![],
1869+
"ua2aks/falaol/dts" => vec![],
1870+
"ua2aks/fle" => vec![&UA2AKS_FLE_DFR, &UA2AKS_FLE_DSGI, &UA2AKS_FLE_DEN],
1871+
"ua2aks/fle/den" => vec![],
1872+
"ua2aks/fle/dfr" => vec![],
1873+
"ua2aks/fle/dsgi" => vec![],
1874+
"ua2aks/fsh" => vec![&UA2AKS_FSH_DH, &UA2AKS_FSH_DPH, &UA2AKS_FSH_DLD],
1875+
"ua2aks/fsh/dh" => vec![],
1876+
"ua2aks/fsh/dld" => vec![],
1877+
"ua2aks/fsh/dph" => vec![],
1878+
"ua2aks/fss" => vec![&UA2AKS_FSS_DEDU, &UA2AKS_FSS_DPSY, &UA2AKS_FSS_DST, &UA2AKS_FSS_DSOCIO],
1879+
"ua2aks/fss/dedu" => vec![],
1880+
"ua2aks/fss/dpsy" => vec![],
1881+
"ua2aks/fss/dsocio" => vec![],
1882+
"ua2aks/fss/dst" => vec![],
1883+
"ua2aks/ia" => vec![],
1884+
"ua2aks/it" => vec![],
1885+
"ubma/facdr" => vec![&UBMA_FACDR_PLD, &UBMA_FACDR_PSD],
1886+
"ubma/facdr/pld" => vec![],
1887+
"ubma/facdr/psd" => vec![],
1888+
"ubma/faclschs" => vec![&UBMA_FACLSCHS_PD, &UBMA_FACLSCHS_ALLD, &UBMA_FACLSCHS_SD, &UBMA_FACLSCHS_ICSD, &UBMA_FACLSCHS_FLD, &UBMA_FACLSCHS_HD, &UBMA_FACLSCHS_BD, &UBMA_FACLSCHS_ELD, &UBMA_FACLSCHS_TD, &UBMA_FACLSCHS_HSSD, &UBMA_FACLSCHS_PSED, &UBMA_FACLSCHS_ILD],
1889+
"ubma/faclschs/alld" => vec![],
1890+
"ubma/faclschs/bd" => vec![],
1891+
"ubma/faclschs/eld" => vec![],
1892+
"ubma/faclschs/fld" => vec![],
1893+
"ubma/faclschs/hd" => vec![],
1894+
"ubma/faclschs/hssd" => vec![],
1895+
"ubma/faclschs/icsd" => vec![],
1896+
"ubma/faclschs/ild" => vec![],
1897+
"ubma/faclschs/pd" => vec![],
1898+
"ubma/faclschs/psed" => vec![],
1899+
"ubma/faclschs/sd" => vec![],
1900+
"ubma/faclschs/td" => vec![],
1901+
"ubma/facsc" => vec![&UBMA_FACSC_PD, &UBMA_FACSC_SSD, &UBMA_FACSC_NLSD, &UBMA_FACSC_BD, &UBMA_FACSC_MCD, &UBMA_FACSC_MD, &UBMA_FACSC_MSD, &UBMA_FACSC_CD],
1902+
"ubma/facsc/bd" => vec![],
1903+
"ubma/facsc/cd" => vec![],
1904+
"ubma/facsc/mcd" => vec![],
1905+
"ubma/facsc/md" => vec![],
1906+
"ubma/facsc/msd" => vec![],
1907+
"ubma/facsc/nlsd" => vec![],
1908+
"ubma/facsc/pd" => vec![],
1909+
"ubma/facsc/ssd" => vec![],
1910+
"ubma/facsceg" => vec![&UBMA_FACSCEG_ESD, &UBMA_FACSCEG_CT, &UBMA_FACSCEG_FSD, &UBMA_FACSCEG_MSD],
1911+
"ubma/facsceg/ct" => vec![],
1912+
"ubma/facsceg/esd" => vec![],
1913+
"ubma/facsceg/fsd" => vec![],
1914+
"ubma/facsceg/msd" => vec![],
1915+
"ubma/facsci" => vec![&UBMA_FACSCI_PED, &UBMA_FACSCI_HD, &UBMA_FACSCI_ED, &UBMA_FACSCI_STD, &UBMA_FACSCI_CSD, &UBMA_FACSCI_MD, &UBMA_FACSCI_TT, &UBMA_FACSCI_CED, &UBMA_FACSCI_D, &UBMA_FACSCI_MED],
1916+
"ubma/facsci/ced" => vec![],
1917+
"ubma/facsci/csd" => vec![],
1918+
"ubma/facsci/d" => vec![],
1919+
"ubma/facsci/ed" => vec![],
1920+
"ubma/facsci/hd" => vec![],
1921+
"ubma/facsci/md" => vec![],
1922+
"ubma/facsci/med" => vec![],
1923+
"ubma/facsci/ped" => vec![],
1924+
"ubma/facsci/std" => vec![],
1925+
"ubma/facsci/tt" => vec![],
1926+
"ubma/facscm" => vec![&UBMA_FACSCM_PD, &UBMA_FACSCM_DDM, &UBMA_FACSCM_MD, &UBMA_FACSCM_TT],
1927+
"ubma/facscm/ddm" => vec![],
1928+
"ubma/facscm/md" => vec![],
1929+
"ubma/facscm/pd" => vec![],
1930+
"ubma/facscm/tt" => vec![],
1931+
"ubma/facsct" => vec![&UBMA_FACSCT_PD, &UBMA_FACSCT_AD, &UBMA_FACSCT_MD, &UBMA_FACSCT_GD],
1932+
"ubma/facsct/ad" => vec![],
1933+
"ubma/facsct/gd" => vec![],
1934+
"ubma/facsct/md" => vec![],
1935+
"ubma/facsct/pd" => vec![],
1936+
"umbm" => vec![&UMBM_FLL, &UMBM_FDSP, &UMBM_FTECH, &UMBM_IUTM, &UMBM_FSEGC, &UMBM_FMI, &UMBM_FSHS, &UMBM_FSCI, &UMBM_ISTAPS],
1937+
"umbm/fdsp" => vec![&UMBM_FDSP_DDROIT, &UMBM_FDSP_DSP],
1938+
"umbm/fdsp/ddroit" => vec![],
1939+
"umbm/fdsp/dsp" => vec![],
1940+
"umbm/fll" => vec![&UMBM_FLL_DFLL, &UMBM_FLL_DALL, &UMBM_FLL_DELL],
1941+
"umbm/fll/dall" => vec![],
1942+
"umbm/fll/dell" => vec![],
1943+
"umbm/fll/dfll" => vec![],
1944+
"umbm/fmi" => vec![&UMBM_FMI_DCS, &UMBM_FMI_DMATH],
1945+
"umbm/fmi/dcs" => vec![],
1946+
"umbm/fmi/dmath" => vec![],
1947+
"umbm/fsci" => vec![&UMBM_FSCI_DCHI, &UMBM_FSCI_DSA, &UMBM_FSCI_DBCMB, &UMBM_FSCI_DPHY, &UMBM_FSCI_DSNV],
1948+
"umbm/fsci/dbcmb" => vec![],
1949+
"umbm/fsci/dchi" => vec![],
1950+
"umbm/fsci/dphy" => vec![],
1951+
"umbm/fsci/dsa" => vec![],
1952+
"umbm/fsci/dsnv" => vec![],
1953+
"umbm/fsegc" => vec![&UMBM_FSEGC_DSFC, &UMBM_FSEGC_DSG, &UMBM_FSEGC_DSE, &UMBM_FSEGC_DSC],
1954+
"umbm/fsegc/dsc" => vec![],
1955+
"umbm/fsegc/dse" => vec![],
1956+
"umbm/fsegc/dsfc" => vec![],
1957+
"umbm/fsegc/dsg" => vec![],
1958+
"umbm/fshs" => vec![&UMBM_FSHS_DHIST, &UMBM_FSHS_DPHILO, &UMBM_FSHS_DSCI, &UMBM_FSHS_DSI, &UMBM_FSHS_DSOCIO],
1959+
"umbm/fshs/dhist" => vec![],
1960+
"umbm/fshs/dphilo" => vec![],
1961+
"umbm/fshs/dsci" => vec![],
1962+
"umbm/fshs/dsi" => vec![],
1963+
"umbm/fshs/dsocio" => vec![],
1964+
"umbm/ftech" => vec![&UMBM_FTECH_DHYDR, &UMBM_FTECH_DCE, &UMBM_FTECH_DME, &UMBM_FTECH_DEE, &UMBM_FTECH_DELEC],
1965+
"umbm/ftech/dce" => vec![],
1966+
"umbm/ftech/dee" => vec![],
1967+
"umbm/ftech/delec" => vec![],
1968+
"umbm/ftech/dhydr" => vec![],
1969+
"umbm/ftech/dme" => vec![],
1970+
"umbm/istaps" => vec![&UMBM_ISTAPS_DAGS, &UMBM_ISTAPS_DCBF, &UMBM_ISTAPS_DAPSA, &UMBM_ISTAPS_DFC, &UMBM_ISTAPS_DEP, &UMBM_ISTAPS_DMCS],
1971+
"umbm/istaps/dags" => vec![],
1972+
"umbm/istaps/dapsa" => vec![],
1973+
"umbm/istaps/dcbf" => vec![],
1974+
"umbm/istaps/dep" => vec![],
1975+
"umbm/istaps/dfc" => vec![],
1976+
"umbm/istaps/dmcs" => vec![],
1977+
"umbm/iutm" => vec![&UMBM_IUTM_DCM, &UMBM_IUTM_DUE, &UMBM_IUTM_DCG],
1978+
"umbm/iutm/dcg" => vec![],
1979+
"umbm/iutm/dcm" => vec![],
1980+
"umbm/iutm/due" => vec![],
1981+
"umkb" => vec![&UMKB_FLL, &UMKB_FDSP, &UMKB_FSECSG, &UMKB_FSHS, &UMKB_FSESNV, &UMKB_FST, &UMKB_ISTAPS],
1982+
"umkb/fdsp" => vec![],
1983+
"umkb/fll" => vec![],
1984+
"umkb/fsecsg" => vec![],
1985+
"umkb/fsesnv" => vec![],
1986+
"umkb/fshs" => vec![],
1987+
"umkb/fst" => vec![&UMKB_FST_DEE],
1988+
"umkb/fst/dee" => vec![&UMKB_FST_DEE_SEC],
1989+
"umkb/fst/dee/sec" => vec![],
1990+
"umkb/istaps" => vec![],
1991+
"ummto" => vec![&UMMTO_FMED, &UMMTO_FDSP, &UMMTO_FSECSG, &UMMTO_FSBSA, &UMMTO_FSHS, &UMMTO_DSAT, &UMMTO_FGEI, &UMMTO_DMI, &UMMTO_FGC],
1992+
"ummto/dmi" => vec![],
1993+
"ummto/dsat" => vec![],
1994+
"ummto/fdsp" => vec![],
1995+
"ummto/fgc" => vec![],
1996+
"ummto/fgei" => vec![],
1997+
"ummto/fmed" => vec![],
1998+
"ummto/fsbsa" => vec![],
1999+
"ummto/fsecsg" => vec![],
2000+
"ummto/fshs" => vec![],
2001+
"usthb" => vec![&USTHB_FGMGP, &USTHB_FSB, &USTHB_FCHIMIE, &USTHB_FPHY, &USTHB_FSTGAT, &USTHB_FEI, &USTHB_FMATH, &USTHB_FGC],
2002+
"usthb/fchimie" => vec![&USTHB_FCHIMIE_DCPMI, &USTHB_FCHIMIE_DCM, &USTHB_FCHIMIE_DCPT, &USTHB_FCHIMIE_DCOA],
2003+
"usthb/fchimie/dcm" => vec![],
2004+
"usthb/fchimie/dcoa" => vec![],
2005+
"usthb/fchimie/dcpmi" => vec![],
2006+
"usthb/fchimie/dcpt" => vec![],
2007+
"usthb/fei" => vec![&USTHB_FEI_AUTO, &USTHB_FEI_INFO, &USTHB_FEI_TELECOM, &USTHB_FEI_ELT],
2008+
"usthb/fei/auto" => vec![],
2009+
"usthb/fei/elt" => vec![],
2010+
"usthb/fei/info" => vec![],
2011+
"usthb/fei/telecom" => vec![],
2012+
"usthb/fgc" => vec![&USTHB_FGC_DGH, &USTHB_FGC_DSM],
2013+
"usthb/fgc/dgh" => vec![],
2014+
"usthb/fgc/dsm" => vec![],
2015+
"usthb/fgmgp" => vec![&USTHB_FGMGP_DCMP, &USTHB_FGMGP_DGCC, &USTHB_FGMGP_DTE, &USTHB_FGMGP_DGEGP, &USTHB_FGMGP_DSM],
2016+
"usthb/fgmgp/dcmp" => vec![],
2017+
"usthb/fgmgp/dgcc" => vec![],
2018+
"usthb/fgmgp/dgegp" => vec![],
2019+
"usthb/fgmgp/dsm" => vec![],
2020+
"usthb/fgmgp/dte" => vec![],
2021+
"usthb/fmath" => vec![&USTHB_FMATH_DA, &USTHB_FMATH_DPS, &USTHB_FMATH_DRO, &USTHB_FMATH_DATN],
2022+
"usthb/fmath/da" => vec![],
2023+
"usthb/fmath/datn" => vec![],
2024+
"usthb/fmath/dps" => vec![],
2025+
"usthb/fmath/dro" => vec![],
2026+
"usthb/fphy" => vec![&USTHB_FPHY_DEMF, &USTHB_FPHY_DMC, &USTHB_FPHY_DPR, &USTHB_FPHY_DPT],
2027+
"usthb/fphy/demf" => vec![],
2028+
"usthb/fphy/dmc" => vec![],
2029+
"usthb/fphy/dpr" => vec![],
2030+
"usthb/fphy/dpt" => vec![],
2031+
"usthb/fsb" => vec![&USTHB_FSB_DEE, &USTHB_FSB_DBCM, &USTHB_FSB_DBPO],
2032+
"usthb/fsb/dbcm" => vec![],
2033+
"usthb/fsb/dbpo" => vec![],
2034+
"usthb/fsb/dee" => vec![],
2035+
"usthb/fstgat" => vec![&USTHB_FSTGAT_DGAT, &USTHB_FSTGAT_DG, &USTHB_FSTGAT_DGP],
2036+
"usthb/fstgat/dg" => vec![],
2037+
"usthb/fstgat/dgat" => vec![],
2038+
"usthb/fstgat/dgp" => vec![],
2039+
"usto" => vec![&USTO_IEPS, &USTO_FCH, &USTO_ISTA, &USTO_FMI, &USTO_FSNV, &USTO_FAG, &USTO_FGE, &USTO_FGM, &USTO_FPH],
2040+
"usto/fag" => vec![&USTO_FAG_DA, &USTO_FAG_DGE, &USTO_FAG_DGC],
2041+
"usto/fag/da" => vec![],
2042+
"usto/fag/dgc" => vec![],
2043+
"usto/fag/dge" => vec![],
2044+
"usto/fch" => vec![&USTO_FCH_DGC, &USTO_FCH_DCHM, &USTO_FCH_DCHP],
2045+
"usto/fch/dchm" => vec![],
2046+
"usto/fch/dchp" => vec![],
2047+
"usto/fch/dgc" => vec![],
2048+
"usto/fge" => vec![&USTO_FGE_DAU, &USTO_FGE_DEL, &USTO_FGE_DELT],
2049+
"usto/fge/dau" => vec![],
2050+
"usto/fge/del" => vec![],
2051+
"usto/fge/delt" => vec![],
2052+
"usto/fgm" => vec![&USTO_FGM_DGME, &USTO_FGM_DMM, &USTO_FGM_DGMA],
2053+
"usto/fgm/dgma" => vec![],
2054+
"usto/fgm/dgme" => vec![],
2055+
"usto/fgm/dmm" => vec![],
2056+
"usto/fmi" => vec![&USTO_FMI_DINF, &USTO_FMI_DMA],
2057+
"usto/fmi/dinf" => vec![],
2058+
"usto/fmi/dma" => vec![],
2059+
"usto/fph" => vec![&USTO_FPH_DGP, &USTO_FPH_DTM, &USTO_FPH_DPE],
2060+
"usto/fph/dgp" => vec![],
2061+
"usto/fph/dpe" => vec![],
2062+
"usto/fph/dtm" => vec![],
2063+
"usto/fsnv" => vec![&USTO_FSNV_DBIO, &USTO_FSNV_DVE, &USTO_FSNV_DGMA],
2064+
"usto/fsnv/dbio" => vec![],
2065+
"usto/fsnv/dgma" => vec![],
2066+
"usto/fsnv/dve" => vec![],
2067+
"usto/ieps" => vec![],
2068+
"usto/ista" => vec![],
2069+
_ => vec![],
2070+
}
2071+
}

0 commit comments

Comments
 (0)