use std::collections::HashMap;
pub trait AfProvider {
fn lookup_af(&self, mcu: &str, pin: &str, func: &str) -> Option<u8>;
}
#[allow(dead_code)]
pub struct JsonAfDb {
map: HashMap<String, HashMap<String, HashMap<String, u8>>>,
}
impl JsonAfDb {
#[allow(dead_code)]
pub fn from_path(path: &std::path::Path) -> anyhow::Result<Self> {
let data = std::fs::read_to_string(path)?;
let map = serde_json::from_str(&data)?;
Ok(Self { map })
}
}
impl AfProvider for JsonAfDb {
fn lookup_af(&self, mcu: &str, pin: &str, func: &str) -> Option<u8> {
self.map
.get(mcu)
.and_then(|p| p.get(pin))
.and_then(|m| m.get(func))
.copied()
}
}