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
use std::fmt::Display;
use std::fmt::Write;

pub fn custom_delimited<I, D>(iterable: I, delimiter: &str, prepend: &str) -> String
    where
        I: IntoIterator<Item=D> + Clone,
        D: Display {
    if iterable.clone().into_iter().next().is_none() {
        return String::new();
    }

    let mut s = String::from(prepend);
    iterable.into_iter().for_each(|item| write!(&mut s, "{item}{delimiter}").unwrap());
    String::from(s.trim_end_matches(delimiter))
}

pub fn comma_delm<I, D>(iterable: I) -> String
    where
        I: IntoIterator<Item=D> + Clone,
        D: Display {
    custom_delimited(iterable, ", ", "")
}

pub fn newline_delimited<I, D>(iterable: I) -> String
    where
        I: IntoIterator<Item=D> + Clone,
        D: Display {
    custom_delimited(iterable, "\n", "")
}