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
58
59
60
61
62
63
64
65
66
67
68
use std::fmt::Display;
use palett::fluo::matrix::fluo_rendered;
use palett::types::Preset;
use veho::matrix::Mappers;
use veho::vector::mapper;
use crate::padder::matrix_padder;
pub trait Decorable<R>: IntoIterator<Item=R> where
R: IntoIterator,
R::Item: Display,
Self: Sized,
{
fn deco_matrix(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, &[]),
};
let padded = matrix_padder(texts, true);
let lines: Vec<String> = mapper(padded, |vec| format!(" [ {} ],", vec.join(delim)));
return format!("[\n{}\n]", lines.join("\n"));
}
}
impl<M, R> Decorable<R> for M where
M: IntoIterator<Item=R>,
R: IntoIterator,
R::Item: Display
{}
pub fn deco_matrix<R, M>(mx: M,
de: Option<&str>,
presets: Option<&(Preset, Preset)>, ) -> String where
M: IntoIterator<Item=R>,
R: IntoIterator,
R::Item: Display
{
mx.deco_matrix(de, presets)
}
#[cfg(test)]
mod deco_matrix_tests {
use palett::presets::{METRO, OCEAN, PLANET, POME};
use veho::matrix::{init, Utils};
use crate::deco_matrix;
#[test]
fn test() {
let matrix = init(5, 5, |i, j| ((i as i32) + 1) * 10_i32.pow(j as u32));
let matrix = matrix.transpose();
let texted = deco_matrix(&matrix, None, Some(&(OCEAN, PLANET)));
println!(">> matrix = {}", texted);
let texted = deco_matrix(&matrix, None, Some(&(POME, METRO)));
println!(">> matrix = {}", texted);
}
}