cargo-nw 0.1.1

Cargo subcommand for building NW application deployment packages (redistributables) for Windows, MacOS and Linux.
use crate::prelude::*;
use sha2::{Digest, Sha256};
// use async_std::path::PathBuf;
use async_std::fs;
use async_std::path::Path;

pub async fn generate_signatures(file: &Path, signatures: &[Signature]) -> Result<()> {
    let data = fs::read(file)
        .await
        .map_err(|_| format!("Unable to read {}", file.to_string_lossy()))?;

    for signature in signatures.iter() {
        let (signature_file, hex) = match signature {
            Signature::SHA256 => {
                let extension =
                    format!("{}.sha256sum", file.extension().unwrap().to_string_lossy());
                let mut signature_file = file.to_path_buf();
                signature_file.set_extension(extension);
                let mut hasher = Sha256::new();
                hasher.update(&data);
                let hash = hasher.finalize();
                (signature_file, format!("{hash:x}"))
            }
        };
        std::fs::write(&signature_file, hex).expect("Failed to write hash to file");
    }
    Ok(())
}