setu-cli 0.1.1

A quick markdown link checker
use std::path::PathBuf;

use crate::checker::{LinkCheckResult, LinkStatus, LocalLinkStatus};

fn evaluate_local_path(mdx_path: &PathBuf, local_path: &String) -> LinkCheckResult {
    let stripped = match local_path.strip_prefix("./") {
        Some(s) => s,
        None => {
            return LinkCheckResult {
                source_file: mdx_path.clone(),
                raw_link: local_path.to_owned(),
                status: LinkStatus::Local(LocalLinkStatus::InvalidPrefix),
            };
        }
    };

    let base_dir = mdx_path.parent().unwrap_or(std::path::Path::new("."));
    let joined_path = base_dir.join(stripped);

    let status = if joined_path.exists() {
        LinkStatus::Local(LocalLinkStatus::Valid)
    } else {
        LinkStatus::Local(LocalLinkStatus::DoesNotExist)
    };

    LinkCheckResult {
        source_file: mdx_path.clone(),
        raw_link: local_path.to_owned(),
        status: status,
    }
}

pub fn evaluate(mdx_path: &PathBuf, local_paths: Vec<String>) -> Vec<LinkCheckResult> {
    local_paths
        .iter()
        .map(|local| evaluate_local_path(mdx_path, local))
        .collect()
}