Skip to main content

rmk_config/resolved/
identity.rs

1/// Keyboard identity for USB descriptors and BLE advertising.
2pub struct Identity {
3    pub name: String,
4    pub vendor_id: u16,
5    pub product_id: u16,
6    pub manufacturer: String,
7    pub product_name: String,
8    /// `None` when `serial_number` is absent from `keyboard.toml`; the codegen will
9    /// substitute `::rmk::config::RMK_BUILD_INFO` so the default is version-stamped.
10    pub serial_number: Option<String>,
11}
12
13impl crate::KeyboardTomlConfig {
14    /// Resolve keyboard identity from TOML config.
15    pub fn identity(&self) -> Result<Identity, String> {
16        let keyboard = self
17            .keyboard
18            .as_ref()
19            .ok_or_else(|| "keyboard.toml: [keyboard] section is required".to_string())?;
20        Ok(Identity {
21            name: keyboard.name.clone(),
22            vendor_id: keyboard.vendor_id,
23            product_id: keyboard.product_id,
24            manufacturer: keyboard.manufacturer.clone().unwrap_or_else(|| "RMK".to_string()),
25            product_name: keyboard
26                .product_name
27                .clone()
28                .unwrap_or_else(|| "RMK Keyboard".to_string()),
29            serial_number: keyboard.serial_number.clone(),
30        })
31    }
32}