Skip to main content

espforge_lib/parse/
project.rs

1use crate::parse::processor::SectionProcessor;
2use anyhow::{Context, Result};
3use espforge_configuration::EspforgeConfiguration;
4use serde::Deserialize;
5use serde_yaml_ng::Value;
6
7#[derive(Deserialize)]
8struct ProjectConfig {
9    name: String,
10    chip: Option<String>,
11    platform: Option<String>,
12    runtime: Option<String>,
13}
14
15pub struct ProjectInfoProvisioner;
16
17impl SectionProcessor for ProjectInfoProvisioner {
18    fn section_key(&self) -> &'static str {
19        "espforge"
20    }
21
22    fn priority(&self) -> u32 {
23        1000
24    }
25
26    fn process(&self, content: &Value, model: &mut EspforgeConfiguration) -> Result<()> {
27        let config: ProjectConfig = serde_yaml_ng::from_value(content.clone())
28            .context("Failed to deserialize espforge configuration")?;
29
30        model.espforge.insert("name".to_string(), config.name);
31
32        if let Some(chip) = config.platform.or(config.chip) {
33            model.espforge.insert("platform".to_string(), chip);
34        }
35
36        if let Some(runtime) = config.runtime {
37            if runtime == "embassy" {
38                model.espforge.insert("runtime".to_string(), runtime);
39            }
40        }
41
42        println!("✓ Project configuration valid and processed.");
43        Ok(())
44    }
45}