use crate::KeyInfo;
pub struct Keymap {
pub rows: u8,
pub cols: u8,
pub layers: u8,
pub keymap: Vec<Vec<Vec<String>>>,
pub encoder_map: Vec<Vec<[String; 2]>>,
pub key_info: Vec<Vec<KeyInfo>>,
pub num_encoder: usize,
}
impl crate::KeyboardTomlConfig {
pub fn keymap(&self) -> Result<Keymap, String> {
let (keymap_config, key_info) = self.get_keymap_config()?;
let num_encoder = self.total_encoders();
for (i, encoders) in keymap_config.encoder_map.iter().enumerate() {
if !encoders.is_empty() && encoders.len() != num_encoder {
return Err(format!(
"keyboard.toml: [[keymap.layer]] #{i} lists {} encoders but the board has \
{num_encoder} (configure all {num_encoder} or none)",
encoders.len()
));
}
}
Ok(Keymap {
rows: keymap_config.rows,
cols: keymap_config.cols,
layers: keymap_config.layers,
keymap: keymap_config.keymap,
encoder_map: keymap_config.encoder_map,
key_info,
num_encoder,
})
}
}