fn hex_to_rgb(hex: &str) -> Result<(u8, u8, u8), String> {
let hex = hex.trim_start_matches('#');
let processed_hex = if hex.len() == 3 {
hex.chars()
.flat_map(|c| std::iter::repeat(c).take(2))
.collect::<String>()
} else {
hex.to_string()
};
if processed_hex.len() != 6 {
return Err("Invalid HEX color code".to_string());
}
let red = u8::from_str_radix(&processed_hex[0..2], 16)
.map_err(|_| "Failed to parse red component")?;
let green = u8::from_str_radix(&processed_hex[2..4], 16)
.map_err(|_| "Failed to parse green component")?;
let blue = u8::from_str_radix(&processed_hex[4..6], 16)
.map_err(|_| "Failed to parse blue component")?;
Ok((red, green, blue))
}
fn main() {
let hex_color1 = "#1E05FF";
match hex_to_rgb(hex_color1) {
Ok((r, g, b)) => println!("RGB: ({}, {}, {})", r, g, b),
Err(e) => eprintln!("Error: {}", e),
}
let hex_color2 = "#f00";
match hex_to_rgb(hex_color2) {
Ok((r, g, b)) => println!("RGB: ({}, {}, {})", r, g, b),
Err(e) => eprintln!("Error: {}", e),
}
}
/*
run:
RGB: (30, 5, 255)
RGB: (255, 0, 0)
*/