use std::collections::HashMap;
use std::sync::LazyLock;
static EMOJI_MAP: LazyLock<HashMap<&'static str, &'static str>> = LazyLock::new(|| {
let mut m = HashMap::new();
m.insert("smile", "๐");
m.insert("smiley", "๐");
m.insert("grinning", "๐");
m.insert("grin", "๐");
m.insert("joy", "๐");
m.insert("laughing", "๐");
m.insert("sweat_smile", "๐
");
m.insert("rofl", "๐คฃ");
m.insert("wink", "๐");
m.insert("blush", "๐");
m.insert("innocent", "๐");
m.insert("heart_eyes", "๐");
m.insert("kissing_heart", "๐");
m.insert("yum", "๐");
m.insert("stuck_out_tongue", "๐");
m.insert("thinking", "๐ค");
m.insert("shushing_face", "๐คซ");
m.insert("raised_eyebrow", "๐คจ");
m.insert("neutral_face", "๐");
m.insert("expressionless", "๐");
m.insert("no_mouth", "๐ถ");
m.insert("smirk", "๐");
m.insert("unamused", "๐");
m.insert("roll_eyes", "๐");
m.insert("grimacing", "๐ฌ");
m.insert("relieved", "๐");
m.insert("pensive", "๐");
m.insert("sleepy", "๐ช");
m.insert("sleeping", "๐ด");
m.insert("drooling", "๐คค");
m.insert("mask", "๐ท");
m.insert("nerd", "๐ค");
m.insert("sunglasses", "๐");
m.insert("confused", "๐");
m.insert("worried", "๐");
m.insert("frowning", "โน๏ธ");
m.insert("open_mouth", "๐ฎ");
m.insert("hushed", "๐ฏ");
m.insert("astonished", "๐ฒ");
m.insert("flushed", "๐ณ");
m.insert("pleading", "๐ฅบ");
m.insert("cry", "๐ข");
m.insert("sob", "๐ญ");
m.insert("scream", "๐ฑ");
m.insert("angry", "๐ ");
m.insert("rage", "๐ก");
m.insert("skull", "๐");
m.insert("poop", "๐ฉ");
m.insert("pile_of_poo", "๐ฉ");
m.insert("clown", "๐คก");
m.insert("ghost", "๐ป");
m.insert("alien", "๐ฝ");
m.insert("robot", "๐ค");
m.insert("wave", "๐");
m.insert("raised_hand", "โ");
m.insert("ok_hand", "๐");
m.insert("thumbs_up", "๐");
m.insert("thumbsup", "๐");
m.insert("+1", "๐");
m.insert("thumbs_down", "๐");
m.insert("thumbsdown", "๐");
m.insert("-1", "๐");
m.insert("fist", "โ");
m.insert("punch", "๐");
m.insert("clap", "๐");
m.insert("raised_hands", "๐");
m.insert("open_hands", "๐");
m.insert("palms_up", "๐คฒ");
m.insert("handshake", "๐ค");
m.insert("pray", "๐");
m.insert("point_up", "โ๏ธ");
m.insert("point_up_2", "๐");
m.insert("point_down", "๐");
m.insert("point_left", "๐");
m.insert("point_right", "๐");
m.insert("middle_finger", "๐");
m.insert("hand", "โ");
m.insert("v", "โ๏ธ");
m.insert("pinched_fingers", "๐ค");
m.insert("love_you", "๐ค");
m.insert("metal", "๐ค");
m.insert("call_me", "๐ค");
m.insert("muscle", "๐ช");
m.insert("brain", "๐ง ");
m.insert("eyes", "๐");
m.insert("eye", "๐๏ธ");
m.insert("tongue", "๐
");
m.insert("lips", "๐");
m.insert("baby", "๐ถ");
m.insert("boy", "๐ฆ");
m.insert("girl", "๐ง");
m.insert("man", "๐จ");
m.insert("woman", "๐ฉ");
m.insert("older_man", "๐ด");
m.insert("older_woman", "๐ต");
m.insert("dog", "๐ถ");
m.insert("cat", "๐ฑ");
m.insert("mouse", "๐ญ");
m.insert("hamster", "๐น");
m.insert("rabbit", "๐ฐ");
m.insert("fox", "๐ฆ");
m.insert("bear", "๐ป");
m.insert("panda", "๐ผ");
m.insert("koala", "๐จ");
m.insert("tiger", "๐ฏ");
m.insert("lion", "๐ฆ");
m.insert("cow", "๐ฎ");
m.insert("pig", "๐ท");
m.insert("frog", "๐ธ");
m.insert("monkey", "๐ต");
m.insert("see_no_evil", "๐");
m.insert("hear_no_evil", "๐");
m.insert("speak_no_evil", "๐");
m.insert("chicken", "๐");
m.insert("penguin", "๐ง");
m.insert("bird", "๐ฆ");
m.insert("eagle", "๐ฆ
");
m.insert("duck", "๐ฆ");
m.insert("owl", "๐ฆ");
m.insert("bat", "๐ฆ");
m.insert("wolf", "๐บ");
m.insert("horse", "๐ด");
m.insert("unicorn", "๐ฆ");
m.insert("bee", "๐");
m.insert("bug", "๐");
m.insert("butterfly", "๐ฆ");
m.insert("snail", "๐");
m.insert("ladybug", "๐");
m.insert("ant", "๐");
m.insert("spider", "๐ท๏ธ");
m.insert("scorpion", "๐ฆ");
m.insert("crab", "๐ฆ");
m.insert("snake", "๐");
m.insert("turtle", "๐ข");
m.insert("fish", "๐");
m.insert("octopus", "๐");
m.insert("whale", "๐ณ");
m.insert("dolphin", "๐ฌ");
m.insert("shark", "๐ฆ");
m.insert("crocodile", "๐");
m.insert("dragon", "๐");
m.insert("dinosaur", "๐ฆ");
m.insert("t_rex", "๐ฆ");
m.insert("raccoon", "๐ฆ");
m.insert("vampire", "๐ง");
m.insert("apple", "๐");
m.insert("green_apple", "๐");
m.insert("pear", "๐");
m.insert("orange", "๐");
m.insert("lemon", "๐");
m.insert("banana", "๐");
m.insert("watermelon", "๐");
m.insert("grapes", "๐");
m.insert("strawberry", "๐");
m.insert("cherry", "๐");
m.insert("peach", "๐");
m.insert("mango", "๐ฅญ");
m.insert("pineapple", "๐");
m.insert("coconut", "๐ฅฅ");
m.insert("avocado", "๐ฅ");
m.insert("eggplant", "๐");
m.insert("potato", "๐ฅ");
m.insert("carrot", "๐ฅ");
m.insert("corn", "๐ฝ");
m.insert("hot_pepper", "๐ถ๏ธ");
m.insert("bread", "๐");
m.insert("croissant", "๐ฅ");
m.insert("pizza", "๐");
m.insert("hamburger", "๐");
m.insert("fries", "๐");
m.insert("hotdog", "๐ญ");
m.insert("taco", "๐ฎ");
m.insert("burrito", "๐ฏ");
m.insert("egg", "๐ฅ");
m.insert("cooking", "๐ณ");
m.insert("pancakes", "๐ฅ");
m.insert("bacon", "๐ฅ");
m.insert("steak", "๐ฅฉ");
m.insert("poultry_leg", "๐");
m.insert("sushi", "๐ฃ");
m.insert("ramen", "๐");
m.insert("cake", "๐");
m.insert("cookie", "๐ช");
m.insert("chocolate", "๐ซ");
m.insert("candy", "๐ฌ");
m.insert("lollipop", "๐ญ");
m.insert("icecream", "๐ฆ");
m.insert("donut", "๐ฉ");
m.insert("coffee", "โ");
m.insert("tea", "๐ต");
m.insert("beer", "๐บ");
m.insert("beers", "๐ป");
m.insert("wine", "๐ท");
m.insert("cocktail", "๐ธ");
m.insert("champagne", "๐พ");
m.insert("heart", "โค");
m.insert("red_heart", "โค");
m.insert("orange_heart", "๐งก");
m.insert("yellow_heart", "๐");
m.insert("green_heart", "๐");
m.insert("blue_heart", "๐");
m.insert("purple_heart", "๐");
m.insert("black_heart", "๐ค");
m.insert("white_heart", "๐ค");
m.insert("broken_heart", "๐");
m.insert("sparkling_heart", "๐");
m.insert("fire", "๐ฅ");
m.insert("sparkles", "โจ");
m.insert("star", "โญ");
m.insert("glowing_star", "๐");
m.insert("sparkle", "โ๏ธ");
m.insert("zap", "โก");
m.insert("boom", "๐ฅ");
m.insert("sun", "โ๏ธ");
m.insert("moon", "๐");
m.insert("cloud", "โ๏ธ");
m.insert("rainbow", "๐");
m.insert("umbrella", "โ๏ธ");
m.insert("snowflake", "โ๏ธ");
m.insert("snowman", "โ");
m.insert("gift", "๐");
m.insert("balloon", "๐");
m.insert("tada", "๐");
m.insert("party_popper", "๐");
m.insert("confetti", "๐");
m.insert("trophy", "๐");
m.insert("medal", "๐
");
m.insert("first_place", "๐ฅ");
m.insert("second_place", "๐ฅ");
m.insert("third_place", "๐ฅ");
m.insert("soccer", "โฝ");
m.insert("basketball", "๐");
m.insert("football", "๐");
m.insert("baseball", "โพ");
m.insert("tennis", "๐พ");
m.insert("guitar", "๐ธ");
m.insert("microphone", "๐ค");
m.insert("headphones", "๐ง");
m.insert("video_game", "๐ฎ");
m.insert("dice", "๐ฒ");
m.insert("dart", "๐ฏ");
m.insert("phone", "๐ฑ");
m.insert("computer", "๐ป");
m.insert("keyboard", "โจ๏ธ");
m.insert("printer", "๐จ๏ธ");
m.insert("mouse_pc", "๐ฑ๏ธ");
m.insert("light_bulb", "๐ก");
m.insert("bulb", "๐ก");
m.insert("battery", "๐");
m.insert("electric_plug", "๐");
m.insert("money", "๐ฐ");
m.insert("dollar", "๐ต");
m.insert("credit_card", "๐ณ");
m.insert("gem", "๐");
m.insert("wrench", "๐ง");
m.insert("hammer", "๐จ");
m.insert("gear", "โ๏ธ");
m.insert("link", "๐");
m.insert("lock", "๐");
m.insert("unlock", "๐");
m.insert("key", "๐");
m.insert("bell", "๐");
m.insert("bookmark", "๐");
m.insert("flag", "๐ฉ");
m.insert("triangular_flag", "๐ฉ");
m.insert("checkered_flag", "๐");
m.insert("clock", "๐");
m.insert("hourglass", "โณ");
m.insert("watch", "โ");
m.insert("alarm_clock", "โฐ");
m.insert("stopwatch", "โฑ๏ธ");
m.insert("calendar", "๐
");
m.insert("memo", "๐");
m.insert("pencil", "โ๏ธ");
m.insert("pen", "๐๏ธ");
m.insert("book", "๐");
m.insert("books", "๐");
m.insert("newspaper", "๐ฐ");
m.insert("folder", "๐");
m.insert("inbox_tray", "๐ฅ");
m.insert("outbox_tray", "๐ค");
m.insert("envelope", "โ๏ธ");
m.insert("email", "๐ง");
m.insert("package", "๐ฆ");
m.insert("clipboard", "๐");
m.insert("pushpin", "๐");
m.insert("paperclip", "๐");
m.insert("scissors", "โ๏ธ");
m.insert("wastebasket", "๐๏ธ");
m.insert("check", "โ");
m.insert("checkmark", "โ");
m.insert("check_mark", "โ๏ธ");
m.insert("white_check_mark", "โ
");
m.insert("x", "โ");
m.insert("cross", "โ");
m.insert("cross_mark", "โ");
m.insert("negative_squared_cross_mark", "โ");
m.insert("question", "โ");
m.insert("grey_question", "โ");
m.insert("exclamation", "โ");
m.insert("grey_exclamation", "โ");
m.insert("warning", "โ ๏ธ");
m.insert("no_entry", "โ");
m.insert("prohibited", "๐ซ");
m.insert("sos", "๐");
m.insert("info", "โน๏ธ");
m.insert("ok", "๐");
m.insert("new", "๐");
m.insert("free", "๐");
m.insert("up", "๐");
m.insert("cool", "๐");
m.insert("vs", "๐");
m.insert("100", "๐ฏ");
m.insert("arrow_up", "โฌ๏ธ");
m.insert("arrow_down", "โฌ๏ธ");
m.insert("arrow_left", "โฌ
๏ธ");
m.insert("arrow_right", "โก๏ธ");
m.insert("arrow_upper_right", "โ๏ธ");
m.insert("arrow_lower_right", "โ๏ธ");
m.insert("arrow_lower_left", "โ๏ธ");
m.insert("arrow_upper_left", "โ๏ธ");
m.insert("arrows_counterclockwise", "๐");
m.insert("back", "๐");
m.insert("end", "๐");
m.insert("on", "๐");
m.insert("soon", "๐");
m.insert("top", "๐");
m.insert("arrow_forward", "โถ๏ธ");
m.insert("arrow_backward", "โ๏ธ");
m.insert("play_pause", "โฏ๏ธ");
m.insert("stop_button", "โน๏ธ");
m.insert("record_button", "โบ๏ธ");
m.insert("fast_forward", "โฉ");
m.insert("rewind", "โช");
m.insert("repeat", "๐");
m.insert("shuffle", "๐");
m.insert("radio_button", "๐");
m.insert("white_circle", "โช");
m.insert("black_circle", "โซ");
m.insert("red_circle", "๐ด");
m.insert("blue_circle", "๐ต");
m.insert("green_circle", "๐ข");
m.insert("yellow_circle", "๐ก");
m.insert("orange_circle", "๐ ");
m.insert("purple_circle", "๐ฃ");
m.insert("brown_circle", "๐ค");
m.insert("white_square", "โฌ");
m.insert("black_square", "โฌ");
m.insert("red_square", "๐ฅ");
m.insert("blue_square", "๐ฆ");
m.insert("green_square", "๐ฉ");
m.insert("yellow_square", "๐จ");
m.insert("orange_square", "๐ง");
m.insert("purple_square", "๐ช");
m.insert("brown_square", "๐ซ");
m.insert("rocket", "๐");
m.insert("construction", "๐ง");
m.insert("mag", "๐");
m.insert("search", "๐");
m.insert("mag_right", "๐");
m.insert("speech_balloon", "๐ฌ");
m.insert("thought_balloon", "๐ญ");
m.insert("nail_care", "๐
");
m.insert("zany_face", "๐คช");
m.insert("monocle", "๐ง");
m.insert("nerd_face", "๐ค");
m.insert("partying_face", "๐ฅณ");
m.insert("mechanical_arm", "๐ฆพ");
m.insert("mechanical_leg", "๐ฆฟ");
m
});
pub fn get_emoji(name: &str) -> Option<&'static str> {
EMOJI_MAP.get(name).copied()
}
pub fn is_valid_emoji(name: &str) -> bool {
EMOJI_MAP.contains_key(name)
}
pub fn all_emoji_names() -> impl Iterator<Item = &'static str> {
EMOJI_MAP.keys().copied()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_get_emoji() {
assert_eq!(get_emoji("smile"), Some("๐"));
assert_eq!(get_emoji("thumbs_up"), Some("๐"));
assert_eq!(get_emoji("heart"), Some("โค")); assert_eq!(get_emoji("rocket"), Some("๐"));
}
#[test]
fn test_unknown_emoji() {
assert_eq!(get_emoji("nonexistent"), None);
}
#[test]
fn test_is_valid_emoji() {
assert!(is_valid_emoji("smile"));
assert!(!is_valid_emoji("unknown"));
}
#[test]
fn test_all_emoji_names() {
let names: Vec<_> = all_emoji_names().collect();
assert!(names.contains(&"smile"));
assert!(names.contains(&"heart"));
assert!(names.len() > 100); }
}