(dir: &Path, vendor: &Vendor, device: &str)
| 185 | } |
| 186 | |
| 187 | async fn handle_device(dir: &Path, vendor: &Vendor, device: &str) -> Result<()> { |
| 188 | let device_conf = dir.join("devices").join(device); |
| 189 | |
| 190 | info!(path = ?device_conf, "Reading device configuration"); |
| 191 | let device_conf: DeviceConfig = toml::from_str(&fs::read_to_string(device_conf)?)?; |
| 192 | info!(device_name = %device_conf.device.name, "Device loaded"); |
| 193 | |
| 194 | let _ = device_profile::upsert_device(device_profile::Device { |
| 195 | id: device_conf.device.id.into(), |
| 196 | vendor_id: vendor.id.into(), |
| 197 | name: device_conf.device.name.clone(), |
| 198 | description: device_conf.device.description.clone(), |
| 199 | metadata: fields::KeyValue::new(device_conf.device.metadata.clone()), |
| 200 | ..Default::default() |
| 201 | }) |
| 202 | .await?; |
| 203 | |
| 204 | for firmware in &device_conf.device.firmware { |
| 205 | let span = span!(Level::INFO, "", firmware = %firmware.version); |
| 206 | handle_firmware(dir, &device_conf.device, firmware) |
| 207 | .instrument(span) |
| 208 | .await?; |
| 209 | } |
| 210 | |
| 211 | Ok(()) |
| 212 | } |
| 213 | |
| 214 | async fn handle_firmware(dir: &Path, device: &Device, firmware: &DeviceFirmware) -> Result<()> { |
| 215 | let codec = if let Some(codec) = &firmware.codec { |
no test coverage detected