ateam 1.0.12

The tool that helps optimize the code review process.
Documentation
use super::table;
use super::types::Review;
use super::types::ScoredPr;

pub fn prs(sprs: &[ScoredPr], num: Option<usize>, debug: bool, short: bool, json: bool) -> String {
    let limit = num.unwrap_or(10000);
    if json {
        json_prs(sprs, limit)
    } else if short {
        short_prs(sprs, limit, debug)
    } else {
        format!("{}", table::from(sprs, limit, debug))
    }
}

fn short_prs(sprs: &[ScoredPr], limit: usize, debug: bool) -> String {
    sprs.iter()
        .take(limit)
        .map(|spr| pr(spr, debug))
        .collect::<Vec<String>>()
        .join("\n")
}

fn pr(spr: &ScoredPr, _debug: bool) -> String {
    format!("{}", &spr.pr)
}

pub fn reviews(reviews: &[Review], json: bool) -> String {
    if json {
        json_reviews(reviews)
    } else {
        format!("{}", table::from_reviews(reviews))
    }
}

fn json_prs(sprs: &[ScoredPr], limit: usize) -> String {
    let len = sprs.len();
    let l = if limit > len { len } else { limit };
    match serde_json::to_string(&sprs[..l]) {
        Ok(json) => json,
        Err(error) => error.to_string(),
    }
}

fn json_reviews(reviews: &[Review]) -> String {
    match serde_json::to_string(&reviews) {
        Ok(json) => json,
        Err(error) => error.to_string(),
    }
}