mapm-cli 6.1.0

The command-line implementation of mapm
use crate::utils::build;
use crate::utils::dirs::template_dir;
use std::path::Path;

pub fn build(problem_dir: &Path, contests: Vec<String>) {
    for contest in contests {
        let contest_result =
            mapm::contest::fetch_contest(Path::new(&contest), problem_dir, &template_dir());
        if let Ok(contest) = &contest_result {
            build::exec_script(&contest.template.name)
        };
        build::contest(&contest_result);
    }
}

pub fn preview(
    problem_dir: &Path,
    problem_names: Vec<String>,
    hide: Option<Vec<String>>,
    show: Option<Vec<String>>,
) {
    let views = crate::utils::views::parse_views(hide, show);
    let problems =
        crate::utils::views::problem_names_to_problems(problem_dir, &problem_names, views);
    for problem in problems {
        build::preview(&problem);
    }
}

pub fn preview_all(
    problem_dir: &Path,
    filters: Vec<String>,
    hide: Option<Vec<String>>,
    show: Option<Vec<String>>,
) {
    let views = crate::utils::views::parse_views(hide, show);
    let filters = crate::utils::filter::parse_filters(&filters);
    let problem_names = crate::utils::filter::filtered_names(&filters, problem_dir);
    let filtered_problems =
        crate::utils::views::problem_names_to_problems(problem_dir, &problem_names, views);
    build::preview_all(&filtered_problems);
}