use crate::grib1::ecmwf_table_128::ECMWF_TABLE_128;
use crate::grib1::ecmwf_table_140::ECMWF_TABLE_140;
use gribberish_types::Parameter;
pub fn ecmwf_local_parameter(category: u8, parameter: u8) -> Option<Parameter> {
let table: &[(u8, &str, &str, &str)] = match category {
128 => ECMWF_TABLE_128,
140 => ECMWF_TABLE_140,
_ => return None,
};
table
.iter()
.find(|(num, _, _, _)| *num == parameter)
.map(|(_, abbrev, name, unit)| Parameter {
name: name.to_string(),
abbrev: abbrev.to_string(),
unit: unit.to_string(),
})
}
pub fn ecmwf_local_category(category: u8) -> &'static str {
match category {
128 => "ecmwf table 128",
140 => "ecmwf table 140",
_ => "ecmwf local",
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_ecmwf_discipline_192_table_128() {
let stl1 = ecmwf_local_parameter(128, 139).unwrap();
assert_eq!(stl1.abbrev, "stl1");
assert!(stl1.name.contains("Soil temperature level 1"));
let swvl1 = ecmwf_local_parameter(128, 39).unwrap();
assert_eq!(swvl1.abbrev, "swvl1");
let sst = ecmwf_local_parameter(128, 34).unwrap();
assert_eq!(sst.abbrev, "sst");
}
#[test]
fn test_ecmwf_discipline_192_table_140() {
let swh = ecmwf_local_parameter(140, 229).unwrap();
assert_eq!(swh.abbrev, "swh");
}
#[test]
fn test_ecmwf_discipline_192_dispatch() {
use crate::templates::product::parameters::parameter;
let p = parameter(192, 128, 139).unwrap();
assert_eq!(p.abbrev, "stl1");
assert!(parameter(192, 99, 0).is_none());
}
}