pub fn lookup_emoji<S: AsRef<str>>(pattern: S) -> Option<(&'static str, &'static str)> {
let pattern = pattern.as_ref();
if !pattern.starts_with(':') || !pattern.ends_with(':') || pattern.len() <= 2 {
return None;
}
let shortcode = &pattern[1..pattern.len() - 1];
emojis::get_by_shortcode(shortcode).map(|emoji| (emoji.as_str(), emoji.name()))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_emoji_lookup() {
assert_eq!(
lookup_emoji(":smile:"),
Some(("😄", "grinning face with smiling eyes"))
);
assert_eq!(lookup_emoji(":heart:"), Some(("❤️", "red heart")));
assert_eq!(lookup_emoji(":thumbsup:"), Some(("👍", "thumbs up")));
}
#[test]
fn test_no_colons() {
assert_eq!(lookup_emoji("smile"), None);
assert_eq!(lookup_emoji(":smile"), None);
assert_eq!(lookup_emoji("smile:"), None);
}
#[test]
fn test_empty_shortcode() {
assert_eq!(lookup_emoji("::"), None);
assert_eq!(lookup_emoji(":"), None);
}
#[test]
fn test_unknown_emoji() {
assert_eq!(lookup_emoji(":this_emoji_does_not_exist:"), None);
}
}