use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
use super::Action;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum KeyBinding {
One(String),
Many(Vec<String>),
}
impl KeyBinding {
#[must_use]
pub fn into_keys(self) -> Vec<String> {
match self {
KeyBinding::One(key) => vec![key],
KeyBinding::Many(keys) => keys,
}
}
}
pub fn warn_unknown<A: Action>(overrides: &BTreeMap<String, Vec<String>>) {
for name in overrides.keys() {
if A::from_config_name(name).is_none() {
log::warn!("unknown key action '{name}' in config, ignoring");
}
}
}
pub(super) fn override_keys<A: Action>(
overrides: &BTreeMap<String, Vec<String>>,
action: A,
) -> Vec<String> {
overrides
.get(action.config_name())
.cloned()
.unwrap_or_else(|| {
action
.default_keys()
.iter()
.map(|key| (*key).to_string())
.collect()
})
}