pub mod colors;
use colors::load_colors;
pub async fn get_color_by_name(color_name: &str) -> Option<(u8, u8, u8)> {
let color_data = load_colors().await.unwrap_or_default();
let color_name = color_name.to_lowercase();
if let Some(color) = color_data.get(&color_name) {
let r = color["r"].as_u64().unwrap_or(0) as u8;
let g = color["g"].as_u64().unwrap_or(0) as u8;
let b = color["b"].as_u64().unwrap_or(0) as u8;
return Some((r, g, b));
}
None
}
#[cfg(test)]
mod tests {
use super::*;
#[tokio::test]
async fn test_get_color_by_name() {
let color = get_color_by_name("red").await;
assert_eq!(color, Some((255, 0, 0))); }
#[tokio::test]
async fn test_get_color_by_invalid_name() {
let color = get_color_by_name("invalid_color").await;
assert_eq!(color, None); }
#[tokio::test]
async fn test_get_color_case_insensitive() {
let color = get_color_by_name("Red").await;
assert_eq!(color, Some((255, 0, 0)));
let color_lowercase = get_color_by_name("red").await;
assert_eq!(color_lowercase, Some((255, 0, 0))); }
#[tokio::test]
async fn test_load_colors_failure() {
let result = load_colors().await;
assert!(result.is_ok(), "Failed to load colors."); }
}