rmk_config/resolved/
keymap.rs1use crate::KeyInfo;
2
3pub struct Keymap {
6 pub rows: u8,
7 pub cols: u8,
8 pub layers: u8,
9 pub keymap: Vec<Vec<Vec<String>>>,
10 pub encoder_map: Vec<Vec<[String; 2]>>,
11 pub key_info: Vec<Vec<KeyInfo>>,
12 pub num_encoder: usize,
14}
15
16impl crate::KeyboardTomlConfig {
17 pub fn keymap(&self) -> Result<Keymap, String> {
19 let (keymap_config, key_info) = self.get_keymap_config()?;
20 let num_encoder = self.total_encoders();
22
23 for (i, encoders) in keymap_config.encoder_map.iter().enumerate() {
25 if !encoders.is_empty() && encoders.len() != num_encoder {
26 return Err(format!(
27 "keyboard.toml: [[keymap.layer]] #{i} lists {} encoders but the board has \
28 {num_encoder} (configure all {num_encoder} or none)",
29 encoders.len()
30 ));
31 }
32 }
33
34 Ok(Keymap {
35 rows: keymap_config.rows,
36 cols: keymap_config.cols,
37 layers: keymap_config.layers,
38 keymap: keymap_config.keymap,
39 encoder_map: keymap_config.encoder_map,
40 key_info,
41 num_encoder,
42 })
43 }
44}