espforge_lib/nibblers/
project.rs1use 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);