1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
//! Convert emoticons `B-)` into Unicode emoji's 😎
//!
//! ```
//! use emojicon::Emojicon;
//! # fn main() {
//! 
//! let emojicon = Emojicon::new();
//! assert_eq!(emojicon.get("B-)"), Some("😎"));
//! # }
//! ```
//!
//! # Acknowledgment
//! * [emoticon](https://github.com/wooorm/emoticon) by Titus Wormer

use std::collections::HashMap;

mod emoticons;

pub struct Emojicon {
    emoticons: HashMap<&'static str, &'static str>,
}

impl Emojicon {
    /// Creates a new instance of `Emojicon`.
    pub fn new() -> Self {
        Self {
            emoticons: emoticons::emoticons()
        }
    }

    /// Gets the emoji for given `emoticon` wrapped in a `Option`.
    /// 
    /// ```
    /// # use emojicon::Emojicon;
    /// # fn main() {
    /// let emojicon = Emojicon::new();
    /// assert_eq!(emojicon.get(":-\"]"), Some("😊"));
    /// # }
    /// ```
    pub fn get(&self, emoticon: &str) -> Option<&str> {
        self.emoticons.get(emoticon).map(|i| *i)
    }
}

#[cfg(test)]
mod tests {
    use super::Emojicon;

    #[test]
    fn test() {
        let emoji = Emojicon::new();
        assert_eq!(emoji.get(":)").unwrap(), "πŸ˜ƒ");
        assert_eq!(emoji.get(":Z").unwrap(), "πŸ˜’");
        assert_eq!(emoji.get(",:-[").unwrap(), "πŸ˜“");
        assert_eq!(emoji.get("smile"), None);
    }
}