espforge_lib/parse/
devices.rs

1use crate::parse::EspforgeConfiguration;
2use crate::parse::processor::{ProcessorRegistration, SectionProcessor};
3use anyhow::{Context, Result};
4use espforge_common::Device;
5use serde_yaml_ng::Value;
6use std::collections::HashMap;
7
8pub struct DeviceProvisioner;
9
10impl SectionProcessor for DeviceProvisioner {
11    fn section_key(&self) -> &'static str {
12        "devices"
13    }
14    fn priority(&self) -> u32 {
15        150 // Process after components (200)
16    }
17
18    fn process(&self, content: &Value, model: &mut EspforgeConfiguration) -> Result<()> {
19        let devices: HashMap<String, Device> =
20            serde_yaml_ng::from_value(content.clone()).context("Failed to deserialize devices")?;
21
22        model.devices = devices;
23        println!("✓ {} devices provisioned", model.devices.len());
24        Ok(())
25    }
26}
27
28inventory::submit! {
29    ProcessorRegistration {
30        factory: || Box::new(DeviceProvisioner),
31    }
32}