use std::collections::BTreeMap;
#[derive(Clone, Debug, Default, PartialEq, Eq)]
pub struct Table {
entries: BTreeMap<String, String>,
}
impl Table {
pub fn new() -> Self {
Self::default()
}
pub fn insert(&mut self, from: impl Into<String>, to: impl Into<String>) {
self.entries.insert(from.into(), to.into());
}
pub fn map(&self, model: &str) -> String {
self.entries
.get(model)
.cloned()
.unwrap_or_else(|| model.to_string())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn empty_table_is_the_identity() {
let table = Table::new();
assert_eq!(table.map("gpt-4o-mini"), "gpt-4o-mini");
}
#[test]
fn exact_matches_are_rewritten() {
let mut table = Table::new();
table.insert("gpt-4o-mini", "claude-haiku-4-5");
assert_eq!(table.map("gpt-4o-mini"), "claude-haiku-4-5");
}
#[test]
fn misses_fall_back_to_identity() {
let mut table = Table::new();
table.insert("gpt-4o-mini", "claude-haiku-4-5");
assert_eq!(table.map("gpt-4o"), "gpt-4o");
}
}