use std::process;
use helpers::{check_valid, get_ftp_stream};
mod config;
mod helpers;
mod types;
fn main() {
let state = config::load();
if !check_valid(&state) {
eprintln!("\n🚨 ERROR: unsupported configuration");
process::exit(1);
}
let mut ftp_stream = get_ftp_stream(&state).expect(&format!(
"failed to connect to ftp at {} with username {}",
state.address, state.username
));
let (folder, file) = helpers::get_target_path(&state);
if let Some(file) = &file {
println!("\ndowloading {file}...");
helpers::ftp_retr(&state, &mut ftp_stream, &folder, file);
if !state.keep_compressed {
helpers::decompress(&state, Some(format!("{folder}/{file}")));
}
} else {
let list = ftp_stream.nlst(Some(&folder)).expect("failed to list");
for file in list {
println!("\ndowloading {file}...");
helpers::ftp_retr(&state, &mut ftp_stream, &folder, &file);
if !state.keep_compressed {
helpers::decompress(&state, Some(format!("{folder}/{file}")));
}
}
}
let _ = ftp_stream.quit();
println!("\ndownload successful ✅\n");
}