use crate::ades::{Padding, aes_enc, aes_dec, des_enc, des_dec};
use ext::{no_std::{functions::ext::Curry, pipelines::pipe::Pipe}, val};
use std::fs;
pub fn ades(r#in: String, out: String, aes: String, des: String, encrypt: bool) {
val!(
data = fs::read(r#in).unwrap();
write = |text| fs::write.curryr()(text)(out).unwrap());
aes.padding(32).as_bytes().pipe(|aes_key|
des.padding(24).as_bytes().pipe(|des_key| {
val!(
aes_enc = |data| aes_enc(aes_key)(data);
aes_dec = |data: &_| aes_dec(aes_key)(data);
des_enc = |data: &_| des_enc(des_key)(data);
des_dec = |data| des_dec(des_key)(data));
match encrypt {
true => aes_enc(&data)
.pipe(|ctx| des_enc(&ctx))
.pipe(write),
false => des_dec(&data)
.pipe(|ctx| aes_dec(&ctx))
.pipe(write)
}
})
)
}