pub struct StaticMap {
entries: &'static [(&'static str, &'static str)],
}
impl StaticMap {
pub const fn new(entries: &'static [(&'static str, &'static str)]) -> Self {
Self { entries }
}
pub fn get(&self, key: &str) -> Option<&'static str> {
self.entries
.binary_search_by(|(k, _)| (*k).cmp(key))
.ok()
.map(|i| self.entries[i].1)
}
pub fn contains_key(&self, key: &str) -> bool {
self.entries.binary_search_by(|(k, _)| (*k).cmp(key)).is_ok()
}
pub fn len(&self) -> usize {
self.entries.len()
}
pub fn is_empty(&self) -> bool {
self.entries.is_empty()
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::tables::from_z52::FROM_Z52;
#[test]
fn lookup_against_generated_from_z52() {
let m = StaticMap::new(FROM_Z52);
assert_eq!(m.len(), 440);
assert_eq!(m.get(" \u{184f}"), Some("\u{b7}"));
assert!(m.contains_key(" \u{184f} "));
assert_eq!(m.get("definitely-not-a-key"), None);
assert!(!m.contains_key(""));
}
}