cargo-ddd 0.2.2

A cargo subcommand for inspecting what changes brings dependency version update into your project
use crate::crate_diff_info::CrateDiffInfo;
use crate::dependency_diff::DependencyDiff;

pub fn get_dep_max_len(
    diff: &DependencyDiff,
    max_name_len: &mut usize,
    max_from_ver_len: &mut usize,
    max_to_ver_len: &mut usize,
) {
    get_crate_max_len(&diff.diff, max_name_len, max_from_ver_len, max_to_ver_len);

    get_crates_max_len(
        &diff.updated_deps,
        max_name_len,
        max_from_ver_len,
        max_to_ver_len,
    );

    get_crates_max_len(
        &diff.added_deps,
        max_name_len,
        max_from_ver_len,
        max_to_ver_len,
    );

    get_crates_max_len(
        &diff.removed_deps,
        max_name_len,
        max_from_ver_len,
        max_to_ver_len,
    );
}

pub fn get_crates_max_len(
    diffs: &[CrateDiffInfo],
    max_name_len: &mut usize,
    max_from_ver_len: &mut usize,
    max_to_ver_len: &mut usize,
) {
    for diff in diffs {
        get_crate_max_len(diff, max_name_len, max_from_ver_len, max_to_ver_len);
    }
}

fn get_crate_max_len(
    diff: &CrateDiffInfo,
    max_name_len: &mut usize,
    max_from_ver_len: &mut usize,
    max_to_ver_len: &mut usize,
) {
    *max_name_len = std::cmp::max(*max_name_len, diff.name.len());

    let from_len = diff
        .from_version
        .as_ref()
        .map(|v| format!("{v}").len())
        .unwrap_or_default();
    *max_from_ver_len = std::cmp::max(*max_from_ver_len, from_len);

    let to_len = diff
        .to_version
        .as_ref()
        .map(|v| format!("{v}").len())
        .unwrap_or_default();
    *max_to_ver_len = std::cmp::max(*max_to_ver_len, to_len);
}