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
{}
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);
}
}