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

use palett::fluo::vector::fluo_rendered;
use palett::types::Preset;
use veho::vector::Mappers;

mod joiners;

pub trait Decorable: IntoIterator where
    Self: Sized,
    Self::Item: Display {
    fn deco_vector(self,
                   de: Option<&str>,
                   presets: Option<&(Preset, Preset)>, ) -> String
    {
        let delim = match de { None => ", ", Some(tx) => tx, };
        let texts = match presets {
            None => self.mapper(|x| x.to_string()),
            Some(p) => fluo_rendered(self, p, &[]),
        };
        return format!("[ {} ]", texts.join(delim));
    }
}

impl<I> Decorable for I where
    I: IntoIterator,
    I::Item: Display
{}


// #[cfg(feature = "use_alloc")]
pub fn deco_vector<I>(vec: I,
                      de: Option<&str>,
                      presets: Option<&(Preset, Preset)>, ) -> String where
    I: IntoIterator,
    I::Item: Display
{ vec.deco_vector(de, presets) }

#[cfg(test)]
mod tests {
    use palett::presets::{FRESH, OCEAN};

    use crate::deco_vector;

    #[test]
    fn test() {
        let presets = (OCEAN, FRESH);
        let words = vec!["a", "b", "c", "-", "1", "2", "3"];
        words.join(", ");
        let rendered = deco_vector(&words, Some(", "), Some(&presets));
        println!(">> [rendered] {}", rendered);
        println!(">> [len] {}", words.len());
        println!(">> [capacity] {}", words.capacity());
        let rendered = deco_vector(&words, Some(", "), Some(&presets));
        println!(">> [rendered] {}", rendered);
    }
}