redacta 0.0.1

Command line tool for redacting information from text.
Documentation
use colored::Colorize;
use std::io::Cursor;
use std::io::Write;
use std::process::{Command, Stdio};
use std::time::Instant;

#[test]
fn one_million_logs_no_redaction() {
    let num_logs = 1000000;
    let input = random_logs(num_logs);
    let mut reader = Cursor::new(input.clone());

    let mut child = Command::new("./target/release/redacta")
        .stdin(Stdio::piped())
        .stdout(Stdio::piped())
        .spawn()
        .unwrap();

    let mut stdin = child.stdin.take().unwrap();

    let start = Instant::now();

    std::thread::spawn(move || {
        std::io::copy(&mut reader, &mut stdin).unwrap();
    });

    let output = child.wait_with_output().unwrap();

    let duration = start.elapsed();

    assert!(output.status.success());
    assert_eq!(input, output.stdout);
    println!(
        "processed {} logs in {} ms",
        num_logs.to_string().green(),
        duration.as_millis().to_string().green()
    );
}

fn random_logs(num_logs: u64) -> Vec<u8> {
    let mut logs = Vec::new();

    for _ in 0..num_logs {
        writeln!(&mut logs, "test log").unwrap();
    }

    logs
}