vz 0.0.1

Vault Zipper: Encrypt and compress files with CLI efficiency
Documentation
use ext::{
    no_std::{algebraic::sum::TimeUnit, pipelines::pipe::Pipe},
    standard::functions::fun::{measure_time_with_value, time_conversion_with_unit},
};
use std::time::Duration;
use vz::{
    cli::{
        get_args,
        Compress::{C, D, N, S},
    }, compress::{decompress, par_compress}, encrypt::{Caesar, Crypt, Crypto}, pack::{pack, unpack}
};

fn tla() -> (impl FnOnce(Duration) -> f32, TimeUnit) {
    let a = get_args(); let ret_self = |x| x;
    let (r#in, cs, aes, des, rsa, compress, time) = (&a.input, a.caesar, &a.aes_key, &a.des_key, &a.rsa_private_key, a.compress, a.time);

    let _pack = |ext, f: fn(Vec<u8>) -> Vec<u8>| pack(r#in)(ext, f, |v| v.cs_enc(cs).encrypt(aes, des, rsa));
    let _unpack = |ext, f: fn(Vec<u8>) -> Vec<u8>| unpack(r#in)(ext, f, |v| v.decrypt(aes, des, rsa).cs_dec(cs));
    
    match compress {
        C => _pack(".vz", par_compress),
        D => _unpack(".vz", decompress),
        N(t) => if t.tar { _pack(".vz-n", ret_self) } else { _unpack(".vz-n", ret_self) },
        S(t) => if t.tar {
            pack(r#in)(".vz-s", par_compress, |v| v.cs_enc(173).des_enc(des).aes_enc(aes))
        } else {
            unpack(r#in)(".vz-s", decompress, |v| v.aes_dec(aes).des_dec(des).cs_dec(173))
        },
    }
    time_conversion_with_unit(time)
}

fn main() {
    measure_time_with_value(tla).pipe(|(e, (f, u))| println!("Execution time: {} {u:?}.", f(e)));
}