crawler_data_client 0.0.9

client for programmatic download of crawler data
// #![allow(unused)]

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");
}