extern crate phf;
extern crate regex;
use std::fmt;
use regex::{
Regex,
Captures,
};
include!(concat!(env!("OUT_DIR"), "/emojis.rs"));
#[macro_export]
macro_rules! emoji {
($e: expr) => (
$crate::EMOJIS.get(&format!(":{}:", $e)[..]).unwrap_or(&$e);
)
}
pub struct EmojiFormatter<'a>(pub &'a str);
impl<'a> std::fmt::Display for EmojiFormatter<'a> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let re = Regex::new(r":([a-zA-Z0-9_+-]+):").unwrap();
let result = re.replace_all(self.0, EmojiReplacer);
write!(f, "{}", result)
}
}
struct EmojiReplacer;
impl regex::Replacer for EmojiReplacer {
fn replace_append(&mut self, caps: &Captures<'_>, dst: &mut String) {
let sym = caps.get(0).unwrap().into();
dst.push_str(EMOJIS.get(sym).unwrap_or(&sym));
}
}