palett 0.0.8

ansi color space tool
Documentation
use std::fmt;

use veho::entries::reference::unwind as ref_unwind;
use veho::entries::unwind as move_unwind;

use crate::enums::Effect;
use crate::fluo::vector::{
    fluo_colorant as fluo_vector_colorant,
    fluo_rendered as fluo_vector_rendered,
};
use crate::types::Preset;

pub fn fluo_rendered<K, V, KVS>(
    entries: KVS,
    presets: &(Preset, Preset),
    effects: &[Effect],
) -> Vec<(String, String)> where
    K: fmt::Display,
    V: fmt::Display,
    KVS: IntoIterator<Item=(K, V)>
{
    let (keys, items) = move_unwind(entries);
    let keys = fluo_vector_rendered(keys, presets, effects);
    let items = fluo_vector_rendered(items, presets, effects);
    keys.into_iter().zip(items).collect()
}


pub fn fluo_colorant<K, V, KVS>(
    entries: KVS,
    presets: &(Preset, Preset),
    effects: &[Effect],
) -> Vec<(impl Fn(&str) -> String, impl Fn(&str) -> String)> where
    K: fmt::Display,
    V: fmt::Display,
    KVS: IntoIterator<Item=(K, V)>
{
    let (keys, items) = move_unwind(entries);
    let keys = fluo_vector_colorant(keys, presets, effects);
    let items = fluo_vector_colorant(items, presets, effects);
    keys.into_iter().zip(items).collect()
}

#[cfg(test)]
mod tests {
    use veho::entries::IntoHashmap;
    use veho::vector::{Mappers, zipper};

    use crate::presets::{FRESH, OCEAN};

    use super::*;

    #[test]
    fn test_fluo_entries_rendered() {
        let candidates = vec![
            vec![("one", "1"), ("two", "2"), ("three", "3")].into_hashmap(),
        ];
        for entries in candidates {
            let fluoed = fluo_rendered(
                &mut entries.into_iter(),
                &(OCEAN, FRESH),
                &[Effect::Bold],
            );
            let tx = fluoed.mapper(|(k, v)| format!("[{}] ({})", k, v)).join(", ");
            println!("[ {} ]", tx);
        }
    }


    #[test]
    fn test_fluo_entries_colorant() {
        let candidates = vec![
            vec![("one", "1"), ("two", "2"), ("three", "3")].into_hashmap(),
        ];
        for entries in &candidates {
            let fluoed = fluo_colorant(
                entries,
                &(OCEAN, FRESH),
                &[Effect::Bold],
            );
            let results = zipper(entries, fluoed, |kv, fs| {
                format!("[{}] ({})", (fs.0)(kv.0), (fs.1)(kv.1))
            });
            let tx = results.join(", ");
            println!("test_fluo_entries_colorant: [ {} ]", tx);
        }
    }
}

pub mod reference {
    use super::*;

    pub fn fluo_rendered<'a, K, V, KVS>(
        entries: KVS,
        presets: &(Preset, Preset),
        effects: &[Effect],
    ) -> Vec<(String, String)> where
        K: 'a + fmt::Display,
        V: 'a + fmt::Display,
        KVS: IntoIterator<Item=&'a (K, V)>
    {
        let (keys, items) = ref_unwind(entries);
        let keys = fluo_vector_rendered(keys, presets, effects);
        let items = fluo_vector_rendered(items, presets, effects);
        keys.into_iter().zip(items).collect()
    }

    pub fn fluo_colorant<'a, K, V, KVS>(
        entries: KVS,
        presets: &(Preset, Preset),
        effects: &[Effect],
    ) -> Vec<(impl Fn(&str) -> String + 'a, impl Fn(&str) -> String + 'a)> where
        K: 'a + fmt::Display,
        V: 'a + fmt::Display,
        KVS: IntoIterator<Item=&'a (K, V)>
    {
        let (keys, items) = ref_unwind(entries);
        let keys = fluo_vector_colorant(keys, presets, effects);
        let items = fluo_vector_colorant(items, presets, effects);
        keys.into_iter().zip(items).collect()
    }

    #[cfg(test)]
    mod tests {
        use veho::vector::zipper;

        use crate::presets::{FRESH, OCEAN};

        use super::*;

        #[test]
        fn test_fluo_entries_colorant_ref() {
            let candidates = vec![
                vec![("one", "1"), ("two", "2"), ("three", "3")],
            ];
            for entries in &candidates {
                let fluoed = fluo_colorant(
                    entries.into_iter(),
                    &(OCEAN, FRESH),
                    &[Effect::Bold],
                );
                let results = zipper(entries, fluoed, |kv, fs| {
                    format!("[{}] ({})", (fs.0)(kv.0), (fs.1)(kv.1))
                });
                let tx = results.join(", ");
                println!("test_fluo_entries_colorant: [ {} ]", tx);
            }
        }
    }
}