ChromedriverManager 0.1.0

A Rust library for downloading and managing ChromeDrivers.
Documentation
use crate::structs::packages::ChromePackage;
use anyhow::{self, Ok};
use indicatif::{ProgressBar, ProgressStyle};
use std::{fs::File, io::Write};

pub fn get_latest_chrome_package(chrome_packages: &Vec<ChromePackage>) -> Option<ChromePackage> {
    let mut latest_package: Option<ChromePackage> = None;

    for package in chrome_packages {
        if latest_package.is_none() {
            latest_package = Some(package.clone());
        } else {
            let latest_package_version = &latest_package.as_ref().unwrap().version;
            let package_version = &package.version;

            if package_version > latest_package_version {
                latest_package = Some(package.clone());
            }
        }
    }

    latest_package
}

pub async fn create_progressbar(length: u64) -> ProgressBar {
    let pb = ProgressBar::new(length);
    pb.set_style(ProgressStyle::default_bar()
        .template("{msg}\n{spinner:.green} [{elapsed_precise}] [{wide_bar:.cyan/blue}] {bytes}/{total_bytes} ({bytes_per_sec}, {eta})").unwrap()
        .progress_chars("#>-")
    );

    pb
}

pub async fn write_file(mut file: &File, mut response: reqwest::Response) -> anyhow::Result<()> {
    let file_size = response.content_length().unwrap_or(0);
    let progress_bar = create_progressbar(file_size).await;

    while let Some(chunk) = response.chunk().await? {
        file.write_all(&chunk)?;

        let increment = chunk.len() as u64; // Convert to MB
        progress_bar.inc(increment as u64);
    }

    file.flush()?;

    Ok(())
}