segul 0.18.1

An ultrafast and memory efficient alignment tool for phylogenomics
Documentation
use std::iter;

use chrono::NaiveTime;
use colored::Colorize;
use indicatif::{ProgressBar, ProgressStyle};
use num_format::{Locale, ToFormattedString};

const DIVIDER_LEN: usize = 57;

pub fn fmt_num(num: &usize) -> String {
    num.to_formatted_string(&Locale::en)
}

pub fn parse_duration(duration: u64) -> String {
    let sec = (duration % 60) as u32;
    let min = ((duration / 60) % 60) as u32;
    let hours = ((duration / 60) / 60) as u32;
    let time = NaiveTime::from_hms(hours, min, sec);
    time.format("%H:%M:%S").to_string()
}

#[cfg(not(tarpaulin_include))]
pub fn set_spinner() -> ProgressBar {
    use std::time::Duration;

    let spin = ProgressBar::new_spinner();
    let duration: Duration = Duration::from_millis(150);
    spin.enable_steady_tick(duration);
    spin.set_style(
        ProgressStyle::default_spinner()
            .tick_chars("🌑🌒🌓🌔🌕🌖🌗🌘")
            .template("{spinner} {msg}")
            .expect("Failed getting progress bar."),
    );
    spin
}

#[cfg(not(tarpaulin_include))]
pub fn print_welcome_text(version: &str) {
    log::info!("{}", get_rep_str('=').yellow());
    let text = format!("SEGUL v{}", version);
    log::info!("{}", text.yellow());
    log::info!("{}", "An alignment tool for phylogenomics".yellow());
    log::info!("{}", get_rep_str('-').yellow());
}

pub fn print_divider() {
    let divider = get_rep_str('-');
    log::info!("{}", divider.yellow());
}

fn get_rep_str(sym: char) -> String {
    iter::repeat(sym).take(DIVIDER_LEN).collect()
}

#[cfg(test)]
mod test {
    use super::*;

    #[test]
    fn time_parsing_test() {
        let duration = 65;
        let duration_2 = 3600;
        let time = parse_duration(duration);
        let hours = parse_duration(duration_2);

        assert_eq!("00:01:05", time);
        assert_eq!("01:00:00", hours);
    }

    #[test]
    fn test_num_fmt() {
        let num = 1300;
        let fmt_num = fmt_num(&num);
        assert_eq!("1,300", fmt_num);
    }
}