rust_support 0.1.2

A collection of utilities for Rust
Documentation
use anyhow::Context;
use futures::future;
use pretty_assertions::assert_eq;
use std::path::PathBuf;
use tokio::{fs, try_join};

pub async fn assert_files_with_file_name(
    expected_dir: &PathBuf,
    actual_files: &Vec<PathBuf>,
) -> anyhow::Result<()> {
    let zipped = actual_files
        .clone()
        .into_iter()
        .map(|file| {
            let expected_file = expected_dir.join(file.file_name().unwrap());
            (expected_file, file)
        })
        .collect::<Vec<_>>();

    let futures = zipped
        .into_iter()
        .map(|(expected, actual)| assert_file_content(expected, actual))
        .collect::<Vec<_>>();

    future::try_join_all(futures).await?;
    Ok(())
}

pub async fn assert_file_content(
    expected_path: PathBuf,
    actual_path: PathBuf,
) -> anyhow::Result<()> {
    let expected = fs::read_to_string(&expected_path);
    let actual = fs::read_to_string(&actual_path);
    let (expected, actual) = try_join!(expected, actual).with_context(|| {
        format!(
            "Failed: expected: {}, actual: {}",
            &expected_path.display(),
            &actual_path.display()
        )
    })?;

    assert_eq!(
        expected,
        actual,
        "File content does not match expected content: {} {}",
        &expected_path.display(),
        &actual_path.display()
    );
    Ok(())
}