speedtest-cli 0.1.0

A fast and simple CLI tool to test internet connection speed with real-time progress indicators
use crate::cli::SpeedUnit;
use crate::error::SpeedTestError;
use colored::*;

pub struct SpeedTestResult {
    pub download_speed: Option<f64>,
    pub upload_speed: Option<f64>,
}

impl SpeedTestResult {
    pub fn new(download_speed: Option<f64>, upload_speed: Option<f64>) -> Self {
        Self {
            download_speed,
            upload_speed,
        }
    }
}

pub fn print_success(result: SpeedTestResult, unit: SpeedUnit) {
    println!("\n{}", "Speed Test Results".bold().green());
    println!("{}", "===================".green());

    if let Some(download) = result.download_speed {
        let converted = unit.convert(download);
        println!(
            "{} {:.2} {}",
            "Download Speed:".bold(),
            converted,
            unit.as_str().cyan()
        );
    }

    if let Some(upload) = result.upload_speed {
        let converted = unit.convert(upload);
        println!(
            "{} {:.2} {}",
            "Upload Speed:  ".bold(),
            converted,
            unit.as_str().cyan()
        );
    }

    println!();
}

pub fn print_error(error: &SpeedTestError) {
    eprintln!("\n{} {}", "Error:".bold().red(), error);
    log::error!("{}", error);
}

pub fn print_progress(message: &str) {
    println!("{} {}", "=>".bold().blue(), message);
}