pub use consortium_cfg_common::database::*;
use crate::error::DataError;
struct Embedded {
prefix: &'static str,
yaml: &'static str,
}
const DATABASES: &[Embedded] = &[
Embedded {
prefix: "stm32mp25",
yaml: include_str!("../database/memory/stm32mp25.yaml"),
},
Embedded {
prefix: "stm32mp23",
yaml: include_str!("../database/memory/stm32mp23.yaml"),
},
Embedded {
prefix: "stm32mp21",
yaml: include_str!("../database/memory/stm32mp21.yaml"),
},
Embedded {
prefix: "mimx95",
yaml: include_str!("../database/memory/mimx95.yaml"),
},
Embedded {
prefix: "mimx93",
yaml: include_str!("../database/memory/mimx93.yaml"),
},
];
pub fn load(chip: &str) -> Result<ChipDatabase, DataError> {
let needle = normalize(chip);
let entry = DATABASES
.iter()
.find(|entry| needle.starts_with(entry.prefix))
.ok_or_else(|| DataError::UnknownChip(chip.to_string()))?;
serde_yaml::from_str(entry.yaml)
.map_err(|err| DataError::DatabaseParse(chip.to_string(), err.to_string()))
}
fn normalize(chip: &str) -> String {
let lowered = chip.to_ascii_lowercase();
match lowered.strip_prefix("imx") {
Some(rest) => format!("mimx{rest}"),
None => lowered,
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn resolves_stm32mp25_from_full_part_number() {
let database = load("stm32mp257fak3").expect("stm32mp25 family should resolve");
assert_eq!(database.name, "STM32MP25");
}
#[test]
fn accepts_imx_alias() {
assert!(load("imx95").is_ok());
}
#[test]
fn rejects_unknown_chip() {
assert!(matches!(load("acme9000"), Err(DataError::UnknownChip(_))));
}
}