decrypt_truck 1.3.6

Fast library to decrypt game saves on ETS2 and ATS
Documentation
use decrypt_truck::decrypt_bin_file;
use std::{
    env,
    fs::File,
    io::{Read, Write},
    time::Instant,
};

pub fn save_to_file(filename: &str, data: Vec<u8>) -> Option<()> {
    let mut file = match File::create(filename) {
        Ok(res) => res,
        Err(_) => return None,
    };

    match file.write_all(&data) {
        Ok(_) => Some(()),
        Err(_) => None,
    }
}

pub fn read_file_bin(path: &str) -> Option<Vec<u8>> {
    let mut file = match File::open(path) {
        Ok(res) => res,
        Err(_) => return None,
    };

    let mut buffer = Vec::new();
    match file.read_to_end(&mut buffer) {
        Ok(_) => Some(buffer),
        Err(_) => None,
    }
}

fn main() {
    let start = Instant::now();
    let args: Vec<String> = env::args().collect();

    let args_paths: (String, String) = match args.len() {
        1 => {
            eprintln!("No parameters provided");
            return;
        }
        2 => (args[1].clone(), args[1].clone()),
        3 => (args[1].clone(), args[2].clone()),
        _ => {
            eprintln!("Too many parameters");
            return;
        }
    };

    let bin_file = match read_file_bin(&args_paths.0) {
        Some(res) => res,
        None => {
            eprintln!("Error reading file");
            return;
        }
    };

    match decrypt_bin_file(&bin_file) {
        Ok(res) => {
            save_to_file(&args_paths.1, res);
        }
        Err(e) => {
            eprintln!("{}", e);
        }
    };

    println!("{:?} ms", start.elapsed().as_millis());
}