espforge_lib/nibblers/
project.rs

1use crate::{
2    config::EspforgeConfiguration,
3    nibblers::{ConfigNibbler, NibblerResult, NibblerStatus},
4    register_nibbler,
5};
6use espforge_macros::auto_register_nibbler;
7
8#[derive(Default)]
9#[auto_register_nibbler]
10pub struct ProjectNameNibbler;
11
12impl ConfigNibbler for ProjectNameNibbler {
13    fn name(&self) -> &str {
14        "ProjectNameNibbler"
15    }
16
17    fn priority(&self) -> u8 {
18        0
19    }
20
21    fn process(&self, config: &EspforgeConfiguration) -> Result<NibblerResult, String> {
22        let mut findings = Vec::new();
23        let mut status = NibblerStatus::Ok;
24
25        let name = config.get_name();
26
27        if name.contains(' ') {
28            findings.push(format!("Error: Project name '{}' contains spaces.", name));
29            status = NibblerStatus::Error;
30        } else if name.chars().any(|c| !c.is_alphanumeric() && c != '_') {
31            findings.push(format!(
32                "Warning: Project name '{}' contains special characters.",
33                name
34            ));
35            status = NibblerStatus::Warning;
36        } else {
37            findings.push(format!("Project name '{}' is valid.", name));
38        }
39
40        Ok(NibblerResult {
41            nibbler_name: self.name().to_string(),
42            findings,
43            status,
44        })
45    }
46}
47register_nibbler!(ProjectNameNibbler);