esp_generate/
lib.rs

1pub mod config;
2pub mod template;
3
4/// This turns a list of strings into a sentence, and appends it to the base string.
5///
6/// # Example
7///
8/// ```rust
9/// # use esp_generate::append_list_as_sentence;
10/// let list = &["foo", "bar", "baz"];
11/// let sentence = append_list_as_sentence("Here is a sentence.", "My elements are", list);
12/// assert_eq!(sentence, "Here is a sentence. My elements are `foo`, `bar` and `baz`.");
13/// ```
14pub fn append_list_as_sentence<S: AsRef<str>>(base: &str, word: &str, els: &[S]) -> String {
15    if !els.is_empty() {
16        let mut requires = String::new();
17
18        if !base.is_empty() {
19            requires.push_str(base);
20            requires.push(' ');
21        }
22
23        for (i, r) in els.iter().enumerate() {
24            if i == 0 {
25                requires.push_str(word);
26                requires.push(' ');
27            } else if i == els.len() - 1 {
28                requires.push_str(" and ");
29            } else {
30                requires.push_str(", ");
31            };
32
33            requires.push('`');
34            requires.push_str(r.as_ref());
35            requires.push('`');
36        }
37        requires.push('.');
38
39        requires
40    } else {
41        base.to_string()
42    }
43}