use esp_println::println; use crate::commands::command_handler::{CommandHandleError, SpecificCommandHandler}; use crate::commands::command_handler::CommandHandleError::WrongArguments; use crate::commands::command_data::CommandData; #[derive(Default)] pub struct SetCommand; impl SpecificCommandHandler for SetCommand { fn handle(&self, command: CommandData) -> Result<(), CommandHandleError> { let (cmd, map) = command.deconstruct(); if cmd.parsed_arguments().len() < 5 { println!("Less than 5 args."); return Err(WrongArguments); } let led_id = cmd.parsed_arguments()[1]; let led_id = if let Some(id) = led_id.try_to_integer() { Some(id as usize) } else { map.get_index_by_name(led_id.chars()).ok() }; if led_id.is_none() { println!("Could not parse led id."); return Err(WrongArguments); } let r = cmd.parsed_arguments()[2].try_to_integer(); let g = cmd.parsed_arguments()[3].try_to_integer(); let b = cmd.parsed_arguments()[4].try_to_integer(); if r.is_none() || g.is_none() || b.is_none() { println!("Cold not parse r, g, b."); return Err(WrongArguments); } let r = r.unwrap(); let g = g.unwrap(); let b = b.unwrap(); if r > 255 || g > 255 || b > 255 { return Err(WrongArguments); } map.set_rgb(led_id.unwrap(), Some(r as u8), Some(g as u8), Some(b as u8)).ok().unwrap(); Ok(()) } fn help(&self) -> &'static str { " - Set the specified LED to the given color levels" } }