rufl/string/
split_graphemes.rs

1/// Split the target string into a vector of graphemes str.
2///
3///
4/// # Arguments
5///
6/// * `s` - The string to split into characters.
7///
8/// # Returns
9///
10/// Returns a vector containing the characters extracted from the input string.
11///
12/// # Example
13///
14/// ```rust
15/// use rufl::string;
16///
17/// assert_eq!(vec!["a̐", "é", "ö̲"], string::split_graphemes("a̐éö̲"));
18///
19/// assert_eq!(vec!["h", "e", "l", "l", "o"], string::split_graphemes("hello"));
20///
21/// assert_eq!(vec!["你", "好"], string::split_graphemes("你好"));
22///
23/// ```
24
25pub fn split_graphemes(s: &str) -> Vec<&str> {
26    if s.is_empty() {
27        return vec![""];
28    }
29
30    unicode_segmentation::UnicodeSegmentation::graphemes(s, true).collect::<Vec<&str>>()
31}
32
33#[cfg(test)]
34mod tests {
35    use super::*;
36
37    #[test]
38    fn test_split_graphemes() {
39        assert_eq!(vec![""], split_graphemes(""));
40        assert_eq!(vec!["h", "e", "l", "l", "o"], split_graphemes("hello"));
41        assert_eq!(vec!["a̐", "é", "ö̲"], split_graphemes("a̐éö̲"));
42        assert_eq!(vec!["你", "好"], split_graphemes("你好"));
43    }
44}