flv_util/
string_helper.rs

1//!
2//! # String helpers
3//!
4
5/// Convert string in UpperCammelCase to senteces
6pub fn upper_cammel_case_to_sentence(src: String, remove_first: bool) -> String {
7    // convert "ThisIsATest" to "this is a test"
8    let mut letters: Vec<_> = vec![];
9    for c in src.chars() {
10        if c.is_uppercase() {
11            if !letters.is_empty() {
12                letters.push(' ');
13            }
14            if let Some(lowercase) = c.to_lowercase().to_string().chars().next() {
15                letters.push(lowercase);
16            }
17        } else {
18            letters.push(c);
19        }
20    }
21    let sentence: String = letters.into_iter().collect();
22
23    // remove first word "this is a test" to "is a test"
24    if remove_first {
25        let mut words: Vec<_> = sentence.split_whitespace().collect();
26        words.drain(0..1);
27        words.join(" ")
28    } else {
29        sentence
30    }
31}
32
33//
34// Unit Tests
35//
36
37#[cfg(test)]
38pub mod test {
39    use super::*;
40
41    #[test]
42    fn test_upper_cammel_case_to_sentence() {
43        assert_eq!(
44            upper_cammel_case_to_sentence("ThisIsATest".to_owned(), false),
45            "this is a test"
46        );
47
48        assert_eq!(
49            upper_cammel_case_to_sentence("ThisIsATest".to_owned(), true),
50            "is a test"
51        );
52
53        assert_eq!(
54            upper_cammel_case_to_sentence("TopicAlreadyExists".to_owned(), true),
55            "already exists"
56        );
57
58        assert_eq!(
59            upper_cammel_case_to_sentence("UnknownTopicOrPartition".to_owned(), false),
60            "unknown topic or partition"
61        );
62
63    }
64}